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);
}
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