1

我有一个类扩展ViewGroup,并希望从中得到每一个MotionEvent。到目前为止,我有这个:

class TestViewGroup extends ViewGroup {
     public TestViewGroup(Context context) {
         super(context);
     }

     @Override
     public boolean onTouchEvent(MotionEvent event) {
         Log.d("TestViewGroup", "X: " + (int)event.getX() + " Y: " + (int)event.getY());
         return true;
     }
 }

每次我将手指放在屏幕上时,该onTouchEvent(MotionEvent event)方法都能够捕获一个。MotionEvent但是如果我在手指仍然向下时在屏幕上移动手指,它就不会继续跟踪我手指的坐标。我知道在扩展 a 的类中View,可以在手指移动通过View. 我只是想知道如何将相同的想法应用于ViewGroup.

4

2 回答 2

0

我实现了一个非常简单的 ViewGroup 类并复制了您的代码,onTouchEvent 工作正常

唯一不同的是我实现了所有的构造函数,但一般来说,我也会为 onTochEvent 类调用 super ,这似乎没有什么不同。

所以我想知道您是否遗漏了任何可能会产生影响的代码/xml?

捕获模拟器和设备上的所有触摸事件,除了构造函数之外,几乎就像你的一样。

public class customViewGroup extends ViewGroup {

    public customViewGroup(Context context) {
        super(context,null,0);
   }

    public customViewGroup(Context context, AttributeSet attrs) {
        super(context, attrs,0);

    }

    public customViewGroup(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) {

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.d("bThere", "X: " + (int)event.getX() + " Y: " + (int)event.getY());
        return true;//super.onTouchEvent(event);
    }

}
于 2011-07-17T05:35:47.090 回答
-1

您应该添加viewGroup.setClickable(true);以确保视图可以接收更多的触摸事件。

于 2014-04-03T08:00:06.640 回答