Domanda

Ho una classe denominata punto e molti casi di questa stessa classe vengono creati quando viene eseguito l'app. Il problema è che ho bisogno di essere in grado di fare clic su una delle istanze di questa classe e hanno cliccato l'istanza solo i colori del cambiamento.

Il problema è che ogni volta che clicco su una delle istanze di punti, tutti cambiano colore invece di quello che ho cliccato.

Ecco il codice:

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

}
È stato utile?

Soluzione

non hanno idea di come si sta dichiarando o chiamando o la creazione di questi punti di vista, in modo da non abbiamo idea di come aiutarti.

L'unica cosa che posso dire è che dispatchTouchEvent NON è la stessa cosa di onTouchEvent

Sembra che dispatchTouchEvent è chiamato ogni volta che si evento di tocco sullo schermo, non è su di voi. Quindi tutto vostro punto di vista stanno ricevendo l'evento di tocco, quindi impostando su 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top