Déploiement Android SurfaceView

J'écris une application Android qui génère un bitmap hors écran qui est (par exemple) 640 * 480 pixels et affiche que dans une SurfaceView. Notez que la taille de l'image est plus grande que l'affichage réel sur le combiné.

La façon dont l'application fonctionne est qu'elle affiche d'abord le coin supérieur gauche (0,0) de l'image, puis j'aimerais pouvoir faire défiler l'image.

  • Code source pour les applications Android?
  • Android: comment défiler ScrollView en haut
  • Existe-t-il un moyen de modifier la couleur de la barre d'état Android avec React Native?
  • Quelle autorisation dois-je avoir pour accéder à Internet à partir d'une application Android?
  • Différence entre contexte d'activité et contexte d'application
  • Android: Convertir Stream en String sans avoir de mémoire
  • Ma classe Surfaceview implémente le rappel de démarrage et renvoie une taille de 1024 * 768 qui affiche la zone de l'image qui correspond à l'écran du téléphone. Je voudrais mettre en place un support pour le défilement que je trouve presque impossible en raison de la documentation très limitée (juste des grappes de classes et d'appels sans cohérence). J'ai essayé d'appeler scrollBy et cela ne fonctionne pas.

    Si quelqu'un a des indications sur la façon de procéder, cela serait très apprécié.

  • Comment savoir si le GPS d'un appareil Android est activé?
  • Android: Que dois-je faire au lieu d'utiliser une fonction obsolète (getwidth ())?
  • Automatisation des cas de tests unitaires Android: bibliothèque Robolectric vs Android Testing framework
  • Android - Comment afficher une boîte de dialogue sur un écran natif?
  • ConnectedAndroidTest sur plusieurs émulateurs
  • Barre d'outils de recouvrement transparente Android
  • 2 Solutions collect form web for “Déploiement Android SurfaceView”

    Une fois que vous commencez à utiliser un SurfaceView, vous vous déplacez dans un monde où vous avez une zone vide de pixels, et vous êtes seul pour les dessiner comme vous le souhaitez. Vous faites tout vous-même – et cela signifie que vous devez implémenter le défilement vous-même. Ce n'est pas trivial, mais ce n'est pas trop difficile.

    L'une des façons de le faire est la suivante: – Extension de SurfaceView et implémentation de SurfaceHolder.Callback – Utilisez getHolder (). AddCallback (ceci) pour récupérer le rappel – Utilisez les événements OnTouch pour implémenter le comportement de défilement (c.-à-d. Lors de la réponse, retirez le x , Position y du MotionEvent et paramétrer le décalage de manière appropriée).

    Implémentez un thread pour gérer la mise à jour de l'image. Il y a des exemples de ceci sur le Web (désolé – il n'en a rien à faire maintenant).

    Sinon, utilisez un bitmap hors écran et faites-le dessiner par un ImageView normal (taillez l'ImageView sur la taille du bitmap et placez-le dans une vue de défilement).


    Modifier:

    En voyant que cela consisterait à obtenir des vues, il serait intéressant de souligner que depuis cette fois, j'ai mis en œuvre et publié en tant que source ouverte une petite bibliothèque qui implémente un cadre pour la fonctionnalité ci-dessus (inspiré de nombreux commentaires ici sur SO, parmi autres). On le trouve sur Github: https://github.com/micabyte/android_game

    Je viens de résoudre cela pour mon propre jeu, ma surfaceView est une adaptation de l'exemple de LunarLander par Google.

    Tout est pareil, sauf que je dessine sur mon propre Bitmap privé avec mon propre Canvas privé dans la méthode DoDraw, puis en copier un peu sur le canevas que je donne en utilisant le code ci-dessous.

    Rect src = new Rect(mScrollX, mScrollY, mScrollX+mSurfaceWidth, mScrollY+mSurfaceHeight); Rect dst = new Rect(0, 0, mSurfaceWidth, mSurfaceHeight); surfaceCanvas.drawBitmap (mLevelBitmap, src, dst, null); 

    Les objets Rect définissent comment drawBitmap évalue / transforme les pixels de Bitmap source (mon bitmap privé) vers la destination (le Canvas J'ai été donné pour dessiner dans doDraw ()

    MScrollX et Y sont le coin supérieur gauche du rectangle qui sera affiché (par rapport au grand bitmap privé)

    MSurfaceWidth / Height est la taille du rectangle qui sera affiché

    Assurez-vous simplement que les valeurs de défilement se situent dans des plages acceptables [0, privateBitmapWidth-mSurfaceWidth]

    Mettez à jour les valeurs de défilement vous-même comme vous le souhaitez, (dans onTouchEvent () par exemple)

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.