Как создать представление, которое больше экрана?

Возможно ли создать представление, которое больше экрана?

Мне нужно представление, которое имеет большую ширину, чем экран устройства. Я использую это представление в анимации вращения. Во время вращения части, которые не были на экране перед оживлением вида, станут видимыми.

Есть ли способ достичь этого эффекта с помощью рамки 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);

Ответ 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());
}