Private DispatchTouchEvent?
-
28-09-2019 - |
質問
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.
所属していません StackOverflow