2017-02-11 1 views
0

Je construis un simple jeu Android qui ne nécessite pas de vitesse de défilement. Pensez-y comme un simple jeu d'échecs.Toile provoque le décalage de l'interface utilisateur dans un jeu Android simple

J'ai créé une vue personnalisée, où je dessine tout le jeu en utilisant onDraw():

public class GameView extends View { 
    public GameView (Context context, AttributeSet attrs) { 
     super(context, attrs); 
     ... 
    } 
    protected void onDraw(Canvas canvas) { 
     ... 
    } 
} 

Actuellement en phase de prototypage, je dessine simplement des lignes, des cercles et des rectangles, mais pas les bitmaps .

Je dessine chaque fois qu'un joueur fait un mouvement en utilisant invalidate() (seulement 1 image par mouvement de joueur). Le problème est que lorsque la vue est déjà dessinée, je remarque une baisse de la fréquence d'image dans l'interface utilisateur, lorsque par exemple j'affiche un dialogue ou un toast à l'utilisateur. Ça se passe quand la vue est déjà dessinée, pas au moment où je dessine.

C'est étrange, n'est-ce pas? Puisque la vue est déjà dessinée, pourquoi est-ce que je remarque ce type de latence dans l'interface utilisateur?

Répondre

0

Je pense que vous devriez jeter un oeil à SurfaceView, ce qui pourrait être ce que vous cherchez. Les vues sont toutes dessinées sur le même thread GUI qui est également utilisé pour toutes les interactions de l'utilisateur.

Vous devriez donc utiliser SurfaceView, qui dédie un thread pour dessiner réellement sur le canevas.

Je recommande également Difference between SurfaceView and View?

+0

Merci, je vais essayer. J'ai lu la documentation officielle et il est écrit que "Si votre application ne nécessite pas une quantité importante de traitement ou de vitesse de trame (peut-être pour un jeu d'échecs, un jeu de serpent, ou une autre application lentement animée), alors vous devriez pensez à créer un composant View personnalisé ". Pourquoi la documentation officielle suggère la vue personnalisée au lieu de SurfaceView? Y a-t-il des inconvénients à utiliser le SurfaceView? – MScott

+0

Oui, ce sont quelques inconvénients contre l'utilisation de SurfaceView. Bien que vous ayez l'avantage d'utiliser un thread différent pour dessiner sur le canevas, vous ne pouvez pas obtenir les avantages en utilisant l'Accélération matérielle. Ce sont des sujets qui ont déjà été débattus, et je vous suggère de le vérifier. S'il vous plaît vérifier ma réponse comme correcte s'il vous plaît. :) http://stackoverflow.com/a/15995353/1928275 – Firecat

+1

Et je suppose que OpenGL ES est le meilleur de toutes les solutions? – MScott