Question

J'ai un point de classe nommée et de nombreux cas de cette même classe sont créés lors de l'exécution de l'application. Le problème est que je dois être en mesure de cliquer sur l'une des instances de cette classe et que l'instance que vous avez cliqué changer les couleurs.

Le problème est à chaque fois que je clique sur l'une des instances de points, toutes les changer de couleur au lieu de simplement celui que je clique dessus.

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.
         }
     }

}
Était-ce utile?

La solution

Nous avons aucune idée de comment vous déclarer ou d'appeler ou la création de ces points de vue, donc nous ne savons pas comment vous aider.

La seule chose que je peux dire est que dispatchTouchEvent n'est pas la même chose que onTouchEvent

On dirait que dispatchTouchEvent est appelée à chaque fois il y a un événement tactile à l'écran, pas sur vous. Donc, toutes vos vues reçoivent l'événement tactile, puis la valeur true.

Called to process touch screen events. You can override this to intercept all touch screen events before they are dispatched to the window. Be sure to call this implementation for touch screen events that should be handled normally.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top