Android 私人调度事件?

Android 私人调度事件?,android,instance,private,public,touch-event,Android,Instance,Private,Public,Touch Event,我有一个名为dot的类,这个类的许多实例都是在应用程序运行时创建的。问题是我需要能够单击这个类的一个实例,并让单击的实例只更改颜色 问题是每当我点击其中一个点实例时,它们都会改变颜色,而不仅仅是我点击的那个 代码如下: package com.ewebapps; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.view

我有一个名为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.
         }
     }

}

我们不知道您是如何声明、调用或创建这些视图的,因此我们不知道如何帮助您

我唯一能说的是dispatchTouchEvent和onTouchEvent不是一回事

看起来只要屏幕上有任何触摸事件,就会调用dispatchTouchEvent,而不是在您身上。因此,所有视图都将接收触摸事件,然后设置为true


调用
以处理触摸屏事件。您可以覆盖此选项,以便在将所有触摸屏事件发送到窗口之前拦截这些事件。请确保为应正常处理的触摸屏事件调用此实现。

这是在单独的类中调用的代码,用于创建此“点”对象,通过创建其中许多对象的循环多次调用:FrameLayout main=(FrameLayout)findViewById(R.id.main_视图);main.addView(新点(这个,x,y,25));非常感谢,我基本上理解了您所解释的情况,但我想知道您是否可以给我一个简短的描述,说明我应该做些什么来修复它?也许是一个小示例代码,以及它应该放在哪里?如果不是的话,这很好,但会有很大帮助!谢谢!您应该让您的视图类实现在TouchListener上