2011-07-15 3 views
0

Je suis nouveau dans le développement Android, donc j'ai pris les choses au cours des derniers mois.Quelle est la meilleure/bonne façon de superposer des images

L'application que j'écris nécessite l'affichage de 2 images, l'une au-dessus de l'autre. L'image sur le dessus a des zones transparentes où je veux que l'image ci-dessous apparaisse.

Le problème est que je ne suis pas sûr de la méthode correcte pour le faire.

Le code que j'ai écrit à l'origine ressemble à quelque chose comme ceci:

// background worker thread Run() method 
    Canvas canvas = null; 
    try 
    { 
    canvas = _surfaceHolder.lockCanvas(null); 
    synchronized(_surfaceHolder) 
    { 
     canvas.drawBitmap(_backgroundBitmap, 0, 0, null); 
     // ... 
     canvas.drawBitmap(_foregroundBitmap, 0, 0, null); 
    } 
    } 
    finally 
    { 
    if(canvas != null) 
     _surfaceHolder.unlockCanvasAndPost(canvas); 
    } 

Bien que cela fonctionne, j'ai lu depuis sur la façon dont peut être réalisé en utilisant un ImageView positionné la même chose au-dessus de la vue associée à l'application dans le fichier xml mise en page des activités principales:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <!-- This is the surface where the application is responsible for drawing to --> 
    <com.test.MainAppView 
     android:id="@+id/mainView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     /> 

    <!-- 
    This is where a foreground graphic could be displayed which allows me 
    to remove the drawBitmap() code from the Run() method shown above. 
    --> 
    <ImageView 
     android:id="@+id/foregroundgraphic" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     /> 
</FrameLayout> 

Donc, ma question est vraiment quelle est la bonne méthode? Est-ce que l'un est plus rapide que l'autre?

Toutes les pensées seraient appréciées.

:-)

Un grand merci, Wayne.

Répondre

1

Je dirais que les deux font ce qu'ils sont censés être. Lequel vous choisissez dépend vraiment de votre cas d'utilisation. Avez-vous besoin de placement pixel-parfait? Devez-vous redessiner/modifier l'image plutôt souvent à l'exécution? Utilisez le canevas Sinon, le FrameLayout est plus polyvalent et ne nécessite aucun code personnalisé pour dessiner seulement deux images. Je ne suis pas sûr de la vitesse, je dirais mesurer et voir ce que vous obtenez. Voir ce tutoriel here, si vous êtes nouveau sur Android, vous devriez lire ceci. C'est utile de savoir en général.

+0

Ok, merci pour le conseil. C'est bien d'avoir la certitude que ce que j'ai fait est correct. – Wayne

Questions connexes