1

dotという名前のクラスがあり、アプリの実行時にこの同じクラスの多くのインスタンスが作成されます。問題は、このクラスのインスタンスの1つをクリックして、クリックしたインスタンスの色のみを変更できるようにする必要があることです。

問題は、ドットインスタンスのいずれかをクリックすると、クリックしたものだけでなく、すべての色が変わることです。

コードは次のとおりです。

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

}
4

1 に答える 1

2

これらのビューをどのように宣言、呼び出し、または作成しているかはわかりません。そのため、どのようにサポートするかはわかりません。

私が言える唯一のことは、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.

于 2010-11-04T07:03:20.490 に答える