Как создать вид, который больше экрана?
Можно ли создать вид, который больше экрана?
Мне нужен вид, который имеет большую ширину, чем экран устройства. Я использую этот вид в анимации вращения. Во время поворота части, которые не были на экране до анимации вида, станут видимыми.
Есть ли способ добиться этого эффекта с помощью платформы Android?
Обновить
Я попытался установить родительский макет намного больше, чем экран, и он работает. Это сделает что-то немного неудобным, но это может сработать. Следующая проблема заключается в том, что мой макет по-прежнему начинается с левой стороны экрана. Я не могу придумать, как сделать так, чтобы макет расширялся влево и вправо от экрана.
11 ответов
Хорошо, я получил ответ. Это не очень хорошо, потому что он использует устаревший класс View, но он работает, по крайней мере, на моем текущем разрешении экрана тестирования, другие разрешения тестируются завтра.
Я обернул представление, которое я хотел расширить за пределы экрана, в абсолютном макете, как это:
<AbsoluteLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true">
<ImageView
android:id="@+id/content"
android:layout_width="600dip"
android:layout_height="420dip"
android:scaleType="centerCrop"
android:layout_x="-200dip"
android:layout_y="60dip"
android:src="@color/testcolor" />
</AbsoluteLayout>
Координата -200 x вынуждает флешку на 200d с левой стороны экрана. Если я анимирую вид, те части, которые находятся за пределами экрана, постепенно станут видимыми.
Например, установка отрицательного нижнего поля вместе с установкой очень большого layout_height (достаточно большого для вас) решили ту же проблему, что и для меня.
Хорошо работает, по крайней мере, с использованием API 11+ анимаций / вращений.
Может выглядеть так:
Android:layout_marginBottom="-1000dp" Android:layout_height="1000dp"
В случае, если кто-то все еще появляется на этой странице. Ключом является ваш корневой макет, он будет работать только с FrameLayout (или устаревшим absolutelayout). Тогда у вас есть два варианта, чтобы ваш ребенок смотрел больше.
- через xml это быстро и просто, но вы заранее не знаете фактическую ширину и высоту экрана, поэтому вы можете установить смехотворно высокое значение для layout_width & layout_height, чтобы охватить все экраны.
- Рассчитайте размер экрана программно и сделайте пропорционально большую ширину / высоту вида.
Также имейте в виду, что ваш увеличенный вид по-прежнему начинается в верхнем левом углу экрана, поэтому для учета этого вам нужно будет указать отрицательный верхний и левый поля, которые составляют половину того, что вы добавляете к ширине / высоте вида.
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) viewToMakeBigger.getLayoutParams();
int marginLeft = (int) (viewToMakeBigger.getWidth()*0.1);
int marginTop = (int) (viewToMakeBigger.getHeight()*0.1);
params.width = (int) (viewToMakeBigger.getWidth()*1.2);
params.height = (int) (viewToMakeBigger.getHeight()*1.2);
params.leftMargin = -marginLeft;
params.topMargin = -marginTop;
viewToMakeBigger.setLayoutParams(params);
HorizontalScrollView:
http://developer.android.com/reference/android/widget/HorizontalScrollView.html
Контейнер макета для иерархии представления, которая может прокручиваться пользователем, что позволяет ему быть больше, чем физический дисплей.
Приведенный ниже простой файл axml создает ImageView, который на 400dp шире экрана (даже если layout_width установлен равным ширине родителя) с использованием отрицательного левого и правого поля 200dp.
ImageView расположен на 250dp выше верхней части экрана с использованием отрицательного верхнего поля, при этом 450dp из 700dp вертикальных пикселей видимы на экране.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:background="#FFFF0000"
android:layout_height="700dp"
android:layout_marginLeft="-200dp"
android:layout_marginRight="-200dp"
android:layout_marginTop="-250dp"
android:layout_width="match_parent" />
</RelativeLayout>
Вы можете переопределить представления метода onMeasure. Это установит размеры вашего вида на 1000x1000px
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(1000, 1000);
}
Is it possible to create a view that is bigger then screen?
Почему бы и нет, вы можете определить Layout_Width и Layout_height с помощью px(или dip) сколько угодно:
android:layout_width="10000px"
android:layout_height="20000px"
Вам нужно изменить размер окна с помощью getWindow(). SetLayout. Это увеличит размер вашего окна. Поскольку размер корневого макета может быть таким же большим, как у его родителя, вы можете увеличить размер представления, которое хотите, чтобы оно было больше размера экрана. Это работает для меня, дайте мне знать
Ты можешь использовать ViewSwitcher
справиться с этим. Используется с Animation
и OnGestureListener
выглядит довольно хорошо.
Вы можете сделать это программно:
FrameLayout.LayoutParams rootViewParams = (FrameLayout.LayoutParams) rootView.getLayoutParams();
rootViewParams.height=displayMetrics.heightPixels+(int)dpToPixels(60);
rootViewParams.width=displayMetrics.widthPixels+(int)dpToPixels(60);
rootView.setLayoutParams(rootViewParams);
rootView.setX(rootView.getX() - dpToPixels(30));
rootView.setY(rootView.getY() - dpToPixels(30));
ДОЛЖЕН БЫТЬ ТОЛЬКО В методе public void onWindowFocusChanged(boolean hasFocus).
а также
rootView = (RelativeLayout) findViewById(R.id.rootLayout);
Внутри метода "Защищенный void onCreate(Bundle saveInstanceState)".
Где ваш XML-файл выглядит так:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rootLayout"
tools:context="com.example.Activity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_centerHorizontal="true"
android:layout_margin="30dp"
android:layout_centerVertical="true"
android:layout_height="match_parent">
// Bla bla bla
</RelativeLayout>
а также:
public float dpToPixels(float dp) {
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
}
Просто используйте макет ограничений в качестве решения Root ViewGroup 2021!