我是 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()
。这是内部的,因为它在另一个类中,它是一种类型,因为它是接口(interface)的实现。
好的,考虑到这一点。这种方式对开发者来说更方便。功能是隔离的(通常通过 listenerable 的声明)并且这很容易管理。但这种便利是有代价的。假设您有按钮和十个 onClickListeners。使用这种方法,垃圾收集队列将更快地被每个新的匿名内部类型填满。
但这有关系吗?并不真地。如果您试图从系统中获得每一微秒的性能,那么一定不要使用这种方法。但一般来说,这是可行的。
方法 2:单一继承
public boolean onTouchEvent(MotionEvent event){
return false;
}
假设您阅读了上面的内容,这种方法的创建和清理成本要低得多。只有 1 个额外的类被实例化,并且只有 1 个对象被添加到 GC 队列。
这是我使用的方法,并且已经使用了一段时间。这也是我在 Google 的示例源代码中看到的。
但这并不完美! onTouchEvent
的实现最终看起来是这样的:
public void onTouch(Event e){
if (e.equals(View1)){
}else if (e.equals(View2)){
}else if (e.equals(View 3)){
...}
所以
老实说,没关系。如果您想要尽可能高的性能,请使用静态 onTouchEvent 监听器,并且您不必支付上述成本,但在大多数情况下它们并不昂贵。
关于android - 我应该在哪里实现 Android onTouchListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9492573/