16

视图的区别是什么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);
    }
}

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

如果我有一些滚动和缩放功能,我应该在内部实现它们onTouchEvent还是onTouchListener

4

2 回答 2

14

LeeYiHong 的回答是正确的,另一个非常重要的是写在http://developer.android.com/reference/android/view/View.OnTouchListener.html的内容:

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

于 2015-01-23T23:06:01.510 回答
3

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

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

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

于 2013-11-01T03:43:43.417 回答