【问题标题】:private dispatchTouchEvent?私人调度触摸事件?
【发布时间】:2011-05-04 21:50:58
【问题描述】:

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

}

【问题讨论】:

    标签: android instance private public touch-event


    【解决方案1】:

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

    我只能说 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.

    【讨论】:

    • 这是在一个单独的类中调用来创建这个“点”对象的代码,它通过一个循环调用多次,创建了许多对象: FrameLayout main = (FrameLayout) findViewById(R .id.main_view); main.addView(new Dot(this,x,y,25));
    • 非常感谢,我大部分理解您所解释的情况,但我想知道您能否简要说明我应该如何解决它?也许有一点示例代码,它应该放在哪里?如果不是,那没关系,但它会有很大帮助!谢谢!
    • 你应该让你的视图类实现 OnTouchListener
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多