Как создать вид, который больше экрана? - PullRequest
29 голосов
/ 28 сентября 2010

Можно ли создать вид, который больше экрана?

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

Есть ли способ добиться этого эффекта с помощью платформы Android?

Обновление

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

Ответы [ 10 ]

15 голосов
/ 28 сентября 2010

Хорошо, я получил ответ. Это не очень хорошо, потому что он использует устаревший класс 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 вынуждает ручку вида на 200dip с левой стороны экрана. Если я анимирую вид, те части, которые находятся за пределами экрана, постепенно станут видимыми.

9 голосов
/ 12 марта 2013

Например, установка отрицательного нижнего поля вместе с установкой очень большого layout_height (достаточно большого для вас) решили ту же проблему, что и для меня.

Работает нормально, по крайней мере, с использованием анимации / поворотов API 11+.

Может выглядеть так:

android: layout_marginBottom = "- 1000dp" android: layout_height = "1000dp"

4 голосов
/ 13 марта 2016

В случае, если кто-то все еще появляется на этой странице. Ключ - ваш корневой макет, он будет работать только с FrameLayout (или устаревшим absolutelayout). Тогда у вас есть два варианта, чтобы ваш ребенок смотрел больше.

  1. через xml, это быстро и просто, но вы заранее не знаете фактическую ширину и высоту экрана, поэтому вы можете установить невероятно высокое значение для layout_width & layout_height, чтобы охватить все экраны.
  2. Рассчитайте размер экрана программно и сделайте пропорционально большую ширину / высоту вида ..

Также имейте в виду, что ваш увеличенный вид по-прежнему начинается в верхнем левом углу экрана, поэтому для учета этого вам нужно будет указать отрицательный верхний и левый поля, равные половине того, что вы добавляете к ширине / высоте вида

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 голосов
/ 28 сентября 2010

HorizontalScrollView:

http://developer.android.com/reference/android/widget/HorizontalScrollView.html

Контейнер макета для иерархии представлений, который может прокручиваться пользователем, что позволяет ему быть больше, чем физический дисплей.

3 голосов
/ 07 августа 2016

Простой файл 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>
1 голос
/ 30 сентября 2013

Вы можете переопределить представления метода Memeasure. Это установит размеры вашего вида на 1000x1000px

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    setMeasuredDimension(1000, 1000);
}
1 голос
/ 22 марта 2013

Вам нужно изменить размер окна, используя getWindow (). SetLayout.Это увеличит размер вашего окна.Поскольку размер корневого макета может быть таким же большим, как у его родителя, вы можете увеличить размер представления, которое хотите, чтобы оно было больше размера экрана.Это работает для меня, дайте мне знать

1 голос
/ 28 сентября 2010
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"
0 голосов
/ 19 ноября 2015

Вы можете сделать это программно:

    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 (BundlevedInstanceState)».

Где ваш .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());
}
0 голосов
/ 28 сентября 2010

Вы можете использовать ViewSwitcher, чтобы справиться с этим.Используется с Animation и OnGestureListener выглядит довольно хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...