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

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

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

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

Обновить

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

 Pacerier14 февр. 2012 г., 11:17
«Я пытался установить родительский макет намного больше, чем экран, и он работает», как ты это сделал?
 Harry08 июн. 2015 г., 06:08
Например,android:layout_height="1000dp"

Ответы на вопрос(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);

Внутри метода «Защищенный 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());
}

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

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    setMeasuredDimension(1000, 1000);
}
 Jason Hartley14 июн. 2016 г., 17:48
onMeasure часто называют

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

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

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

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

 Jason Hartley14 июн. 2016 г., 17:45
Установка отрицательного поля - странная вещь для меня, но она отлично работает и представляет собой однострочное решение.
 Allan Veloso25 авг. 2018 г., 21:09
Отрицательное поле работает для многих просмотров, но официально не поддерживаетсяdeveloper.android.com/reference/android/R.attr#layout_margin
Решение Вопроса

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

 yeahdixon04 июн. 2012 г., 21:54
absoluteLayout больше не поддерживается
 John27 мар. 2015 г., 09:03
Кажется, что обертывание ImageView в FrameLayout делает возможным отрицательное поле. Я не понимаю, почему в Android так больно просто смотреть за кадром / частично за кадром.

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

 Pulkit Sethi24 мар. 2013 г., 23:38
Пожалуйста, проверьте мой ответ, он должен сделать ваш вид поверхности больше экрана

В случае, если кто-то все еще появляется на этой странице. Ключ - ваш корневой макет, он будет работать только с 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);
 CODE-REaD05 авг. 2016 г., 18:23
@JasonHartley, если вы удалите ваши комментарии, я удалю мои! Сначала оставьте комментарий типа «удаление в следующую минуту», чтобы я заметил. Благодарю.
 CODE-REaD02 авг. 2016 г., 18:05
@JasonHartley, вы спрашиваете: «Вы пытались использовать отрицательную маржу?» Разве это не то, что код в ответе @ Джорди (params.leftMargin = -marginLeftи т. д.)

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

 WarrenFaith28 сент. 2010 г., 15:29
Чем я рекомендую то, что предложил Пареш Майани или реализацию SurfaceView ...
 Janusz28 сент. 2010 г., 15:23
Я не хочу переключать представления. Я хочу, чтобы представление вращалось по мере того, как пользователь поворачивает свой телефон и будет показывать разные его части в зависимости от ориентации телефона.

Простой файл 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>
 Guilherme Campos Hazan14 июн. 2019 г., 13:57
Отрицательная правая и нижняя поля сделали свое дело
Is it possible to create a view that is bigger then screen? 

Почему нет, вы можете определить Layout_Width и Layout_height с помощьюПВ(или жепадение) сколько хочешь

android:layout_width="10000px"
android:layout_height="20000px"
 Harry08 июн. 2015 г., 06:07
Затем примените эти 10000px к родительскому макету.
 Janusz28 сент. 2010 г., 15:21
Да, но родительский макет представления обрезает представление, если оно становится больше, чем они.
 Janusz28 сент. 2010 г., 15:33
Хорошо, я не был очень конкретным, я обновил свой вопрос, это может сработать, но у меня сейчас другая проблема.
 WarrenFaith28 сент. 2010 г., 15:29
Но вы можете использовать отступ макета с отрицательными значениями, который позволяет вам «прокручивать» внутри.
 Marshal22 дек. 2012 г., 05:52
Не работает. Размер макета по-прежнему размер экрана.

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

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

 vosmith09 дек. 2015 г., 21:51
Это должно быть помечено как правильный ответ, так как AbsoluteLayouts устарели
 Janusz28 сент. 2010 г., 15:22
Я не думаю, что анимация прокрутки является хорошей идеей.

Ваш ответ на вопрос