![](/img/trans.png)
[英]What should I override onTouchEvent() or onTouchListener() in Android?
[英]Where should I implement the Android onTouchListener?
我是Android开发的新手,目前我必须决定在哪里控制手势输入,但我不知道在哪里抓取触摸输入的优缺点。 我有两种选择,你可以向我解释一下这两种方式的优点和缺点吗?
在View上设置监听器; 实施方法:
faceView.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View arg0, MotionEvent arg1){
return false;
}
);
要么
在View中覆盖方法
public boolean onTouchEvent(MotionEvent event){
return false;
}
方法1:匿名内部类型。
faceView.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View arg0, MotionEvent arg1){
return false;
}
);
这是匿名的,因为它是一个没有名字的声明。 没有OnTouchListener mytouch =
,只有声明new OnTouchListener()
。 这是内部的,因为它在另一个类中,它是一个类型,因为它是一个接口的实现。
好的,所以考虑到这一点。 这种方法对开发人员来说更方便。 功能被隔离(通常通过声音的声明),这很容易管理。 但这种便利需要付出代价。 假设您有按钮,有10个onClickListeners。 使用这种方法,垃圾收集队列将更快地填充每个新的匿名内部类型。
但这有关系吗? 并不是的。 如果您试图从系统中获得每微秒的性能,那么一定不要使用这种方法。 但总的来说,这是可行的。
方法2:单一继承
public boolean onTouchEvent(MotionEvent event){
return false;
}
假设您已经阅读了上述内容,这种方法的创建和清理成本要低得多。 实例化只有一个额外的类,并且只有一个对象添加到GC队列。
这是我使用的方法,已经使用了一段时间。 这也是我在Google的示例源代码中看到的内容。
但它并不完美! onTouchEvent
的实现onTouchEvent
将如下所示:
public void onTouch(Event e){
if (e.equals(View1)){
}else if (e.equals(View2)){
}else if (e.equals(View 3)){
...}
所以
老实说,没关系。 如果您希望获得最高性能,请使用静态onTouchEvent监听器,您不必支付上述费用,但大多数情况下它们并不昂贵。
我个人会使用监听器,只需在你的onCreate方法中使用它,现在应该没问题
在大多数情况下,您可能会使用setOnTouchListener,因为它提供了更大的灵活性并遵循一般的Java模式。 通常,重写onTouchEvent只会用于始终出现在View中的touchevents和不会改变的touchevents。 您还必须定义View类以覆盖onTouchEvent。 当使用像按钮这样的东西时,为了处理click事件而必须实现自己的按钮类是没有意义的!
faceView.setOnTouchListener
临
缺点
覆盖onTouchEvent Pro
缺点
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.