Est-il possible de créer une vue plus grande que l'écran?
J'ai besoin d'une vue plus large que l'écran de l'appareil. J'utilise cette vue dans une animation de rotation. Pendant la rotation, les parties qui n'étaient pas à l'écran avant d'animer la vue deviennent visibles.
Existe-t-il un moyen d'obtenir cet effet avec le framework Android?
Mettre à jour
J'ai essayé de définir ma mise en page parent beaucoup plus grande que l'écran et cela fonctionne. Cela rendra quelque chose un peu inconfortable, mais cela pourrait fonctionner. Le problème suivant est que ma mise en page commence toujours à gauche de l'écran. Je ne peux pas penser à une méthode pour rendre la mise en page s'étendre à gauche et à droite de l'écran.
Ok j'ai une réponse. Ce n'est pas très gentil car il utilise une classe View déconseillée, mais cela fonctionne au moins sur la résolution de mon écran de test en cours. Les autres résolutions sont testées demain.
J'ai enveloppé la vue que je voulais développer au-delà de l'écran dans une présentation absolue comme celle-ci:
<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 coordonnée -200 x permet à la vue de coller 200dip du côté gauche de l’écran. Si j'anime la vue, les parties situées en dehors de l'écran deviendront progressivement visibles.
Par exemple. la définition d'une marge inférieure négative ainsi que la définition d'une taille de mise en page très grande (assez grande pour vous) ont résolu le même problème que pour moi.
Fonctionne bien au moins avec les animations/rotations API 11+.
Pourrait ressembler à:
Android: layout_marginBottom = "- 1000dp" Android: layout_height = "1000dp"
Au cas où quelqu'un viendrait encore sur cette page. La clé est votre mise en page racine, elle ne fonctionnera qu'avec un FrameLayout (ou l'absolutelayout obsolète). Ensuite, vous avez deux options pour agrandir la vue de votre enfant.
Sachez également que votre vue agrandie commence toujours dans le coin supérieur gauche de l'écran. Par conséquent, vous devrez donner une marge supérieure et inférieure négative correspondant à la moitié de ce que vous ajoutez à la largeur/hauteur de la vue.
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);
HorizontalScrollView:
http://developer.Android.com/reference/Android/widget/HorizontalScrollView.html
Conteneur de présentation pour une hiérarchie de vues pouvant être déroulée par l'utilisateur, ce qui lui permet d'être plus grand que l'affichage physique.
L'axml simple ci-dessous crée un ImageView 400 dpi plus large que l'écran (même si layout_width est défini sur la largeur du parent) à l'aide d'une marge négative gauche et droite de 200dp.
ImageView est situé 250 dp au-dessus du haut de l'écran avec une marge supérieure négative, avec 450 dp de pixels verticaux de 700dp visibles à l'écran.
<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>
Vous pouvez remplacer les vues de la méthode onMeasure. Cela définira vos dimensions de vue à 1000x1000px
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(1000, 1000);
}
Vous devez modifier la taille de la fenêtre, par getWindow (). SetLayout. Cela augmentera la taille de votre fenêtre. Étant donné que la disposition racine peut être aussi grande que son parent, vous pouvez ensuite augmenter la taille de la vue que vous souhaitez agrandir. Ça marche pour moi laissez moi savoir
Is it possible to create a view that is bigger then screen?
Pourquoi pas, vous pouvez définir autant que vous le souhaitez les propriétés Layout_Width et Layout_height avec px (ou dip ):
Android:layout_width="10000px"
Android:layout_height="20000px"
Vous pouvez le faire par programme:
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));
DOIT ÊTRE UNIQUEMENT DANS "Méthode d'annonce publique sur la propriété de Windows"
et
rootView = (RelativeLayout) findViewById(R.id.rootLayout);
À l'intérieur de la méthode "protected void onCreate (Bundle savedInstanceState)" ".
Où votre fichier .xml est comme ceci:
<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>
et:
public float dpToPixels(float dp) {
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
}
Vous pouvez utiliser ViewSwitcher
pour gérer cela. Utilisé avec Animation
et une OnGestureListener
est plutôt jolie.