1

我有一个名为 dot 的类,并且在应用程序运行时会创建同一个类的许多实例。问题是我需要能够单击此类的一个实例并让单击的实例仅更改颜色。

问题是每当我单击其中一个点实例时,它们都会改变颜色,而不仅仅是我单击的那个。

这是代码:

    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 回答