我是Android开发的新手,目前我必须决定在何处控制手势输入,但我不知道在哪里抓取触摸输入的优缺点。我有两种选择,你可以向我解释两种方式的优点和缺点吗?
在View上设置侦听器;实施方法:
faceView.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View arg0, MotionEvent arg1){
return false;
}
);
或
在视图
中覆盖方法public boolean onTouchEvent(MotionEvent event){
return false;
}
答案 0 :(得分:2)
方法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
的实施最终将如此:
public void onTouch(Event e){
if (e.equals(View1)){
}else if (e.equals(View2)){
}else if (e.equals(View 3)){
...}
SO
老实说,没关系。如果您希望获得最高性能,请使用静态onTouchEvent监听器,您不必支付上述费用,但大多数情况下它们并不昂贵。
答案 1 :(得分:0)
我个人会使用听众,只需在你的onCreate方法中使用它,现在应该没问题
答案 2 :(得分:0)
在大多数情况下,您可能会使用setOnTouchListener,因为它提供了更大的灵活性并遵循一般的Java模式。通常,重写onTouchEvent只会用于始终出现在View中的touchevents和不会改变的touchevents。您还必须定义View类以覆盖onTouchEvent。当使用像按钮这样的东西时,为了处理点击事件而必须实现你自己的按钮类是没有意义的!
faceView.setOnTouchListener
临
缺点
覆盖onTouchEvent 临
缺点