質問

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

}
役に立ちましたか?

解決

これらのビューをどのように宣言または呼び出したり、作成したりしているのかわからないので、あなたを助ける方法がわかりません。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top