приватная рассылка TouchEvent? - PullRequest
1 голос
/ 04 ноября 2010

У меня есть класс с именем точка, и многие экземпляры этого же класса создаются при запуске приложения. Проблема в том, что мне нужно иметь возможность щелкнуть один из экземпляров этого класса, чтобы выбранный экземпляр менял только цвета.

Проблема в том, что всякий раз, когда я нажимаю на один из точек, все они меняют цвет, а не только тот, на который я нажал.

Вот код:

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

}

1 Ответ

2 голосов
/ 04 ноября 2010

Мы не знаем, как вы объявляете, звоните или создаете эти представления, поэтому мы не знаем, как вам помочь.

Единственное, что я могу сказать, это то, что dispatchTouchEvent - это НЕ то же самое, что onTouchEvent

Похоже, что dispatchTouchEvent вызывается всякий раз, когда на экране появляется ЛЮБОЕ событие касания, а не на вас. Таким образом, все ваши представления получают событие касания, а затем устанавливают значение 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.

...