【问题标题】:A View's onTouchListener vs onTouchEvent视图的 onTouchListener 与 onTouchEvent
【发布时间】:2023-03-04 10:20:01
【问题描述】:

视图的onTouchEvent 有什么区别:

public class MyCustomView extends View {
    // THIS :
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return super.onTouchEvent(event);
    }
}

及其onTouchListener

MyCustomView myView = (MyCustomView) findViewById(R.id.customview);
myView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public void onClick(View arg0) {
        // do something
    }
});

public class MyCustomView extends View {

    public MyCustomView(Context context, AttributeSet attrs) {
        // THIS :
        setOnTouchListener(new View.OnTouchListener() {
            @Override
            public void onClick(View arg0) {
                // do something
            }
        });
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return super.onTouchEvent(event);
    }
}

如果这两个不同,
我们需要同时实现这两者吗?
首先调用哪个?

如果我有一些滚动和缩放功能,我应该在onTouchEventonTouchListener 中实现它们吗?

【问题讨论】:

  • “OnTouchListener”的代码应该有一个“onTouch”方法而不是“onClick”

标签: android touch-event ontouchlistener


【解决方案1】:

我不确定您是否找到了答案。但我发现相关的questions 与您的相似。

“只要你声明了接口并正确放置了监听器,onTouch 就可以在任何你想要的地方工作(无论是在活动中还是在视图中)!另一方面,onTouchEvent 只能在视图内工作!”

对于滚动和缩放功能,我猜 onTouchListener 足以完成这两个功能(以及更多类似旋转等)。

【讨论】:

  • “作品”是什么意思?说 onTouchEvent 在 Activity 中不起作用是什么意思?你的意思是只能在 View 对象中实现 onTouchEvent 吗?
【解决方案2】:

LeeYiHong的回答是正确的,另外很重要的一点是http://developer.android.com/reference/android/view/View.OnTouchListener.html写的:

回调[i.e. View.OnTouchListener -> onTouch(View v, MotionEvent event)]将在触摸事件[i.e. onTouchEvent(MotionEvent)]被赋予视图之前被调用。

【讨论】:

  • 除了它们“工作”的位置和处理顺序之外,它们之间是否有任何功能差异?换句话说,有什么你可以用一个做而你不能用另一个做的事情吗?还是更容易?为什么有人会选择一个而不是另一个,还是完全折腾?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 2011-06-27
  • 2012-06-15
  • 1970-01-01
相关资源
最近更新 更多