2010-03-25 6 views
1

Comment afficher des images sous la forme de pages où une seule page est affichée à la fois sur l'écran BlackBerry. Lors du défilement vers le bas les images suivantes seront chargées au moment de l'exécution. Alors que le chargement des images ne consomme pas de temps au démarrage. J'utilise la fonction loadimage qui charge les images de la mémoire de l'appareil BlackBerry, qui charge les images à partir du chemin spécifié et les redimensionne.Comme le nombre d'images augmente, il augmente le temps de démarrage lors de l'ouverture de la fenêtre.Il y a un application (Media) dans le téléphone blackberry, où les images se chargent sans prendre de temps supplémentaire. Mon idée est d'afficher un nombre particulier d'images qui correspondent à l'écran de BlackBerry. Lorsque l'utilisateur fait défiler vers le bas de l'écran, l'application chargera et affichera plus d'images. Donc, ma question est de savoir comment détecter quand l'utilisateur atteint au fond de l'écran de BlackBerry et afficher une ligne d'images de plus.charger dynamiquement des images sur scroll dans blackberry

Répondre

5

Conserver le tableau d'images et l'index d'image actuel. Mettez un champ BitmapField à l'écran. Ajouter des éléments de menu pour Suivant/Préc. Sur Suivant, chargez Bitmap à partir de l'URL de l'index incrémenté, réglez-le sur BitmapField et invalidez l'écran. Sur Prev faire de même avec l'index décrémenté.

  • vous pouvez utiliser le bouton aussi bien (peut-être dans la tempête) mais le menu est obligatoire
  • images de charge dans des threads séparés (en particulier si elles sont stockées dans le Web)
  • vous pouvez implémenter la mise en cache (en mémoire de l'application ou en enregistrant des images sur le stockage de l'appareil)
  • un champ de texte peut être utile (nom de fichier, type, taille, etc dimentions)

MISE à JOUR A cet effet, vous pouvez utiliser ScrollChangeListener

essayer ce code:

class Scr extends MainScreen implements ScrollChangeListener { 
    static int mRowNumber = 0; 

    public Scr() { 
     getMainManager().setScrollListener(this); 
      //preload some images on the start 
     for (int i = 0; i < 20; i++) { 
      mRowNumber = i; 
      add(new BitmapField(downloadBitmap(), FOCUSABLE)); 

     } 
    } 

    public static Bitmap downloadBitmap() { 
     Bitmap result = new Bitmap(200, 80); 
     Graphics g = new Graphics(result); 
     g.drawRect(0, 0, 200, 80); 
     g.drawText("row #" + String.valueOf(mRowNumber), 30, 30); 
     return result; 
    } 

    public void scrollChanged(final Manager manager, int newHorizontalScroll, 
      int newVerticalScroll) { 
     int testBottomScroll = manager.getVirtualHeight() 
       - manager.getVisibleHeight(); 
     if (testBottomScroll == newVerticalScroll) { 
      mRowNumber++; 
      (new Thread(new Runnable() { 
       public void run() { 
        // simulating download 
        Bitmap bitmap = downloadBitmap(); 
        // update ui in thread safe way 
        addBitmap(bitmap); 
       } 
      })).start(); 
     } 
    } 

    public void addBitmap(final Bitmap bitmap) { 
     UiApplication.getUiApplication().invokeLater(new Runnable() { 
      public void run() { 
       getMainManager().add(new BitmapField(bitmap, FOCUSABLE)); 
      } 
     }); 
    } 
} 

PS problème avec cette approche est que vous serez en mesure d'attraper l'événement de défilement que s'il y a assez d'images à l'écran. Envisagez d'utiliser Screen.navigationMovement(int, int, int, int) puis. Et n'oubliez pas de le tester avec la molette et l'écran tactile.

Btw mon avis est qu'il serait préférable de charger toutes les images à la fois en utilisant une file d'attente de fil (si les images seront chargées sans ui verrouillage de manière asynchrone)

+0

Ajout d'informations en question – Maneesh

Questions connexes