繁体   English   中英

我应该在哪里实现Android onTouchListener?

[英]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

  • 允许轻松定制
  • 遵循普遍接受的java模式

缺点

  • 如果行为没有改变,可能会导致不必要的setter。

覆盖onTouchEvent Pro

  • 封装基类中的功能

缺点

  • 不允许自定义

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM