2010-09-28 12 views
23

¿Es posible crear una vista que sea más grande que la pantalla?¿Cómo crear una vista que sea más grande que la pantalla?

Necesito una vista que tenga un ancho mayor que la pantalla del dispositivo. Uso esta vista en una animación de rotación. Durante la rotación, las partes que no estaban en la pantalla antes de animar la vista se volverán visibles.

¿Hay alguna manera de lograr este efecto con el marco de android?

actualización

traté de poner mi diseño de los padres mucho más grande que la pantalla y está trabajando. Esto hará que algunas cosas sean un poco incómodas, pero podría funcionar. El siguiente problema ahora es que mi diseño aún comienza en el lado izquierdo de la pantalla. No puedo pensar en un método para hacer que el diseño se expanda a la izquierda y a la derecha de la pantalla.

+1

"Intenté configurar el diseño de mis padres mucho más grande que la pantalla y funciona", ¿cómo lo hiciste? – Pacerier

+1

Por ejemplo, 'android: layout_height =" 1000dp "' – Harry

Respuesta

12

Ok Tengo una respuesta. No es muy bueno porque usa una clase de Vista obsoleta pero funciona al menos en mi resolución de pantalla de prueba actual, otras resoluciones se prueban mañana.

que envuelve la idea de que quería expandirse más allá de la pantalla en una disposición absoluta de esta manera:

<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> 

La coordenada x -200 hace que la vista se adhieren 200dip de la parte izquierda de la pantalla. Si estoy animando la vista, las partes que están fuera de la pantalla se harán visibles gradualmente.

+2

absoluteLayout ahora está en desuso – yeahdixon

+5

Parece que envolver ImageView en FrameLayout hace posible el margen negativo. No entiendo por qué Android hace que sea tan doloroso colocar una vista fuera de la pantalla/parcialmente fuera de la pantalla. – John

0

Puede usar ViewSwitcher para manejar eso. Usado con Animation y OnGestureListener se ve bastante bien.

+0

No quiero cambiar las vistas Quiero una vista que esté girando mientras el usuario gira su teléfono y mostrará diferentes partes de él dependiendo de la orientación del teléfono. – Janusz

+0

De lo que recomiendo lo que sugiere Paresh Mayani o una implementación de SurfaceView ... – WarrenFaith

1
Is it possible to create a view that is bigger then screen? 

Por qué no, se puede definir el Layout_Width y Layout_height con px (o inmersión) tanto como usted quiere:

android:layout_width="10000px" 
android:layout_height="20000px" 
+7

Sí, pero el diseño principal de la vista recortará la vista si se hace más grande de lo que es. – Janusz

+0

Pero puede usar el relleno de un diseño con valores negativos que le permite "desplazarse" hacia adentro. – WarrenFaith

+0

Bien, no era muy específico. Actualicé mi pregunta, esto podría funcionar, pero ahora tengo otro problema. – Janusz

6

E.g. establecer el margen inferior negativo junto con la configuración extra grande layout_height (lo suficientemente grande para usted) resolvió el problema similar para mí.

Funciona bien al menos utilizando API 11+ animaciones/rotaciones.

podría parecerse:

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

+0

Establecer un margen negativo es extraño para mí, pero funciona bien y es una solución de una sola línea. –

1

Es necesario cambiar el tamaño de la ventana, por GetWindow() .setLayout. Esto aumentará el tamaño de tu ventana.Como el diseño de la raíz puede ser tan grande como su elemento primario, puede aumentar el tamaño de la vista que desea que sea más grande que el tamaño de la pantalla. Funciona para mí, házmelo saber

+0

Compruebe mi respuesta, debe hacer que su vista de superficie sea más grande que la pantalla –

1

Puede anular las vistas en el método de medición. Esto organizar su vista a las dimensiones 1000x1000px

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    setMeasuredDimension(1000, 1000); 
} 
+0

onMeasure se llama a menudo tho –

0

Puede hacerlo mediante programación:

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)); 

sólo debe ser EN "public void onWindowFocusChanged (hasFocus booleano)" método.

y

 rootView = (RelativeLayout) findViewById(R.id.rootLayout); 

interior "protected void onCreate (Bundle savedInstanceState)" método.

Dónde archivo .xml yout es así:

<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> 

y:

public float dpToPixels(float dp) { 
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics()); 
} 
4

Por si alguien todavía aparece en esta página. La clave es su diseño de raíz, solo funcionará con FrameLayout (o el diseño absoluto en desuso). Luego tiene dos opciones para hacer que su hijo sea más grande.

  1. través de XML, esto es rápido y fácil, pero que no conocen el ancho de la pantalla real & altura de antemano por lo que su apagado con el establecimiento de un ridículamente alto valor para layout_width & layout_height para cubrir todas las pantallas.
  2. Calcular el tamaño de pantalla mediante programación y crea de la vista anchura/altura proporcional más grande para este ..

También tenga en cuenta que su vista aún más grande se inicia en la esquina superior izquierda de la pantalla para dar cuenta esto le tiene que dar un top & margen negativo a la izquierda que es la mitad de lo que va a agregar a la vista de anchura/altura

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); 
+0

@JasonHartley, pregunta "¿Ha intentado usar un margen negativo?" ¿No es eso lo que está haciendo el código en la respuesta de @ Jordy ('params.leftMargin = -marginLeft', etc.)? –

+0

@JasonHartley, si elimina sus comentarios, ¡eliminaré el mío! Deje un comentario como "eliminar en el próximo minuto" primero, así lo notare. Gracias. –

1

el simple axml a continuación crea una ImageView que es 400dp más ancha que la pantalla (aunque el layout_width se establece para igualar el ancho del padre) usando un negativo a la izquierda y a la derecha margen de 200dp.

El ImageView se encuentra a 250dp por encima de la parte superior de la pantalla con un margen superior negativo, con 450dp de píxeles verticales de 700dp visibles en la pantalla.

<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> 
Cuestiones relacionadas