Как создать представление, которое больше экрана?
Возможно ли создать представление, которое больше экрана?
Мне нужно представление, которое имеет большую ширину, чем экран устройства. Я использую это представление в анимации вращения. Во время вращения части, которые не были на экране перед оживлением вида, станут видимыми.
Есть ли способ достичь этого эффекта с помощью рамки Android?
Обновление
Я попытался установить родительский макет намного больше, чем экран, и он работает. Это заставит что-то немного неудобно, но это может сработать. Следующая проблема заключается в том, что мой макет все еще начинается с левой стороны экрана. Я не могу придумать способ, чтобы макет расширялся слева и справа от экрана.
Ответы
Ответ 1
Хорошо, я получил ответ. Это не очень приятно, потому что он использует устаревший класс 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 делает вид stick 200dip слева от экрана. Если я оживляю вид, те части, которые находятся за пределами экрана, будут постепенно становиться видимыми.
Ответ 2
например. установка отрицательного нижнего поля вместе с настройкой слишком большого layout_height (достаточно большой для вас) решила аналогичную проблему, как и для меня.
Работает нормально, по крайней мере, используя анимации/вращения API 11+.
Может выглядеть так:
Android: layout_marginBottom = "- 1000dp" андроид: layout_height = "1000dp"
Ответ 3
В случае, если кто-то все еще появляется на этой странице. Ключ вашего корневого макета, он будет работать только с 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);
Ответ 4
HorizontalScrollView:
http://developer.android.com/reference/android/widget/HorizontalScrollView.html
Контейнер компоновки для иерархии представлений, которая может быть прокручена пользователем, что позволяет ей больше физического дисплея.
Ответ 5
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"
Ответ 6
Вам нужно изменить размер окна, getWindow(). setLayout. Это увеличит размер вашего окна. Поскольку корневой макет может быть таким же большим, как и его родительский, вы можете увеличить размер представления, которое вы хотите увеличить, чем размер экрана. Это работает для меня, дайте мне знать
Ответ 7
Вы можете переопределить методы onMeasure. Это установит размеры вашего вида на 1000x1000px
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(1000, 1000);
}
Ответ 8
Простой 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>
Ответ 9
Вы можете использовать ViewSwitcher
для обработки этого. Используется с Animation
и a OnGestureListener
выглядит довольно хорошо.
Ответ 10
Вы можете сделать это программно:
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);
Внутри "protected void onCreate (Bundle savedInstanceState)".
Где находится файл .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());
}