J'ai une classe nommée dot et de nombreuses instances de cette même classe sont créées lors de l'exécution de l'application. Le problème est que je dois être capable de cliquer sur l'une des instances de cette classe et que l'instance cliquée ne change que les couleurs. Le problème est que chaque fois que je clique sur l'une des instances de points, tous changent de couleur au lieu de simplement celui sur lequel j'ai cliqué.privé dispatchTouchEvent?
Voici le code:
package com.ewebapps;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;
public class Dot extends View {
private final float x;
private final float y;
private final int r;
private final Paint mBlack = new Paint(Paint.ANTI_ALIAS_FLAG);
private final Paint mWhite = new Paint(Paint.ANTI_ALIAS_FLAG);
private final Paint mGreen = new Paint(Paint.ANTI_ALIAS_FLAG);
private boolean touched;
public Dot(Context context, float x, float y, int r) {
super(context);
mBlack.setColor(0xFF000000); //Black
mWhite.setColor(0xFFFFFFFF); //White
mGreen.setColor(0xFF00FF00); //Green
this.x = x;
this.y = y;
this.r = r;
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) { // On touch.
touched = true;
//mPaint.setColor(0xFF00FF00); // Turn dot green.
this.invalidate();
return super.dispatchTouchEvent(event);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(x, y, r+2, mWhite); //White stroke.
if(!touched)
{
canvas.drawCircle(x, y, r, mBlack); //Black circle.
}
else
{
canvas.drawCircle(x, y, r, mGreen); //Green circle.
}
}
}
C'est le code qui est appelé dans une classe séparée pour créer un cet objet « point », il est appelé plusieurs fois à travers une boucle créant un grand nombre d'entre eux: FrameLayout principal = (FrameLayout) findViewById (R .id.main_view); main.addView (nouveau point (this, x, y, 25)); – Eweb
Merci beaucoup, j'ai compris la plupart de ce que vous avez expliqué se passait mais je me demandais si vous pouviez me donner une brève description de ce que je devrais faire pour le réparer? Peut-être un petit exemple de code et où devrait-il être placé? Si ce n'est pas correct mais ça aiderait beaucoup! Merci! – Eweb
Vous devez faire en sorte que votre classe de vues implémente OnTouchListener – Falmarri