一个View的onTouchListener与onTouchEvent

时间:2013-10-27 16:32:47

标签: android ontouchevent ontouchlistener

视图的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内实施吗?

2 个答案:

答案 0 :(得分:11)

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

  

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

答案 1 :(得分:1)

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

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

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