2010-08-14 6 views
1

Quelle est la manière la plus simple de dessiner des pixels, des lignes et des cercles sur une vue? Je veux déplacer un curseur en croix, donc rien de particulièrement intensif.Graphiques 2D simples et simples dans une vue

Je pensais pouvoir étendre SurfaceView et l'ajouter à un fichier XML et cela fonctionnerait, mais il apparaît tout simplement noir, cependant, quand je regarde la vue layout de localmap.xml dans eclipse, les graphismes apparaissent comme prévu.

Des idées? Mon onDraw n'est jamais appelé sur l'émulateur, et même appeler invalidate sur la classe ne fait aucune différence. Je continuerai à essayer, mais est-ce que quelqu'un peut voir quelque chose que j'ai manqué? ou y a-t-il un meilleur moyen entièrement?

  • Frink

localmap.xml contient les éléments suivants (dans un RelativeLayout)

<com.example.android.game.LocalMapView 
android:id="@+id/localmap_map" 
android:layout_width="fill_parent" 
android:layout_above="@id/localmap_planettext" 
android:layout_below="@id/header"/> 

LocalMapView.java contient les éléments suivants (entre autres)

public class LocalMapView extends SurfaceView { 

Paint mPaint = new Paint(); 

//Construct a LocalMapView based on inflation from XML 
public LocalMapView(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    // allow the map to receive the focus 
    setFocusable(true); 

}

private void drawPixel(Canvas canvas, int x, int y, int colour) { 
    mPaint.setColor(colour); 
    if ((x >= MAP_MIN_X) && (x < MAP_MAX_X) && (y >= MAP_MIN_Y) && (y < MAP_MAX_Y)) { 
     canvas.drawPoint(((float)x * mScaleMapToScreenX), ((float)y * mScaleMapToScreenY), mPaint); 
    } 
} 



private void drawCircle(Canvas canvas, int x, int y, int radius, int colour) { 
    mPaint.setColor(colour); 
canvas.drawCircle(((float)x), ((float)y), ((float)radius), mPaint); 
} 




@Override 
public void onDraw(Canvas canvas) { 
    super.onDraw(canvas);  
    drawCircle(canvas, MAP_MAX_X/2, MAP_MAX_Y/2, 1, 0xFF00FFFF); 
    drawPixel(canvas, MAP_MAX_X/2, MAP_MAX_Y/2, 0xFF000000); 
} 

Répondre

2

Avec SurfaceView vous ne faites pas le dessin dans onDraw(). Vous devez saisir une toile de la surface sous-jacente et dessiner dedans. Il me semble que vous ne savez pas vraiment pourquoi vous utilisez un SurfaceView. Utilisez simplement une vue normale à la place et onDraw() fonctionnera très bien.

+0

Je pense que je devais être un peu confus quelque part le long du chemin. L'exemple LunarLander utilise SurfaceView, donc je dois avoir copié cela. Merci, - Frink – FrinkTheBrave