2013-03-08 3 views
0

Actuellement, j'ai une classe qui dessine dynamiquement un ensemble de carrés en fonction du contenu d'un fichier sqlite. Comme les données sont assez volumineuses, le dessin est plusieurs fois plus grand que l'écran. J'ai lu beaucoup de méthodes proposées pour le faire et je ne suis pas sûr de la meilleure approche. Comme je ne changerai pas l'image après l'avoir rendu (il suffit de la restituer dynamiquement au redémarrage), la première réponse listée here semble être la meilleure, mais je ne comprends pas très bien comment procéder.Comment créer une grande image que l'on peut faire défiler

Si je comprends bien I:

  1. créer une image bitmap,
  2. créer ma toile (qui est plus grande que la résolution de l'écran)
  3. saisir le bitmap mis en cache et
  4. rendre le bitmap par rapport La toile.

Mais je manque de connaissances pour que cela se produise dans mon code existant. Mon code existant crée simplement une très grande toile (je ne définis pas les limites, je commence juste à dessiner). Ma principale classe ressemble à ceci:

package com.example.drawdemo; 
import android.app.Activity; 
import android.graphics.Color; 
import android.os.Bundle; 

public class DrawDemo extends Activity { 
    DrawView drawView; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    drawView = new DrawView(this); 
    drawView.setBackgroundColor(Color.WHITE); 
    setContentView(drawView); 
    } 
} 

Et quelque chose de classe drawView comme ceci:

public class DrawView extends View { 

    public DrawView(Context context) { 
     super(context);    
    } 

    @Override 
    public void onDraw(Canvas canvas) { 

     //LOTS OF CODE HERE to figure out how to render rectangles through loops 
     // similar to lines like this 
     canvas.drawRect(xStart, rectYPointer, xEnd, rectYPointer+rectSize, paint); 
     // or this 
     canvas.drawText(String.valueOf(rectSize), 130, rectYPointer*2, paint); 

    } 

} 

est l'approche que je prends la bonne approche pour me permettre de faire défiler vers le bas et voir cette grande image est plus grand que l'écran android? Si oui, comment puis-je migrer mon code pour me conformer à l'approche indiquée dans la réponse? Je crois que c'est la bonne méthode?

Répondre

0

Eh bien, j'ai peur que vous n'ayez pas compris le sujet du sujet lié. C'est assez différent de ce que vous essayez d'accomplir.

Cette rubrique traite de l'utilisation d'un bitmap à utiliser ultérieurement.

avez-vous déjà un bitmap construit? (Ou au moins vous pouvez le charger à partir de ressources en utilisant:

BitmapFactory.decode ... (ressource ou d'un fichier en fonction de votre entrée, voir le documentation here)

Votre toile ne doit pas être énorme pour pour le faire défiler à l'intérieur de l'écran La taille de la toile est la taille de votre vue (ici, la taille de l'écran) mais vous allez dessiner l'image en fonction de la position de défilement que vous voulez appliquer

canvas.drawBitmap() 's documentation et canvas.translate peut aider aussi

Fondamentalement ce que vous voulez est: obtenir une référence sur un bitmap de chargement (using bitmapdecode) dans votre vue. puis dans l'onDraw, dessinez le bitmap sur le canevas de la vue pour l'afficher à l'écran. puis, pour ajouter l'effet de défilement, essayez de modifier la traduction y de la toile lorsque vous dessinez dessus.

espérons que cela aide.

Pour plus d'informations (et un bon exemple) au sujet de dessin sur une toile, je vous suggère d'ouvrir l'API demo code source du projet:

API Demos -> Graphics -> TouchPaint 
Questions connexes