2017-04-16 3 views
1

J'ai une vue de surface pour dessiner. Ma vue prend en charge la fonctionnalité de zoom avant/arrière. Maintenant, lorsque l'utilisateur effectue un zoom avant/arrière par un geste du doigt, je veux redimensionner la surface, j'ai essayé de redimensionner en modifiant les paramètres de disposition de surface. Bien que cela fonctionne, mais c'est lent, et tout en faisant le travail de redimensionnement, je vois de gros sauts (décalages), ce qui n'est pas utilisable. Ici, je veux savoir comment puis-je redimensionner la surface de manière efficace (sans ce saut)?Modification de la taille de la vue lors de l'exécution efficacement

Ici sniped de ma structure de vue,

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<FrameLayout 
    android:layout_width="match_parent" 
    android:fillViewport="true" 
    android:layout_above="@+id/bottomMenu" 
    android:layout_height="match_parent"> 

    <MySurfaceView 
     android:layout_gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
</FrameLayout> ... 

Et les params changer le code,

ViewGroup.LayoutParams params = surface.getLayoutParams(); 
params.height = (int) (750*factor); 
surface.setLayoutParams(params); 
+0

Avez-vous envisagé d'utiliser ['TextureView'] (https://developer.android.com/reference/android/view/TextureView.html)? – azizbekian

+0

Référez-vous http://stackoverflow.com/a/21282056/4069985 –

Répondre

0

Eh bien à la fin, j'ai trouvé une méthode de surfaceHolder pour définir la taille de la toile fixe,

holder.setFixedSize(canvasW, canvasH); 

Avec cette méthode, je suis en mesure de redimensionner la mise en page avec des paramètres de mise en page, sans aucune sorte de retard . Ici, j'ai besoin de connaître la taille de la toile avant de la configurer, j'ai donc ajouté mon code SurfaceView à partir du code Java avec une taille prédéfinie et ça marche bien.

** Je ne suis pas sûr encore, pourquoi configurer la taille fixe de toile a fait l'affaire. Vous êtes invités à expliquer un peu (peut-être modifier cette réponse).

+0

Pouvez-vous s'il vous plaît ajouter plus de détails comment l'avez-vous fait? Je suis confronté au même problème lors du redimensionnement d'un SurfaceView en modifiant les décalages de mise en page. – vovan888

+0

lors de l'initialisation de l'ensemble surfaceHolder sa taille est fixée avec la méthode ci-dessus. – asish