方法1:匿名内部类型。
faceView.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View arg0, MotionEvent arg1){
return false;
}
);
这是一个匿名的声明,因为它没有名称。没有
OnTouchListener mytouch =
,只有声明
new OnTouchListener()
。这是内部类,因为它在另一个类内部,并且它是一种类型,因为它是接口的实现。
所以,考虑到这一点。这种方法对开发人员来说更加方便。功能是隔离的(通常通过listenerable的声明),这很容易管理。但这种便利是有代价的。假设您有按钮,带有十个onClickListeners。使用这种方法,每个新的匿名内部类型都会使垃圾收集队列更快地填满。
但这重要吗?不太重要。如果您想从系统中获得每微秒的性能,那么确实不要使用此方法。但一般来说,这是可行的。
方法2:单继承
public boolean onTouchEvent(MotionEvent event){
return false;
}
假设您已经阅读了上面的内容,这种方法在创建和清除方面的成本要低得多。只有一个额外的类被实例化,并且只有一个对象被添加到垃圾回收队列中。
这是我使用的方法,也是我用了一段时间的方法。这也是我在 Google 的示例源代码中看到的方法。
但它并不完美! onTouchEvent 的实现将最终看起来如下:
public void onTouch(Event e){
if (e.equals(View1)){
}else if (e.equals(View2)){
}else if (e.equals(View 3)){
...}
SO
说实话,这并不重要。如果您想获得最高的性能,请使用静态的onTouchEvent监听器,这样您就不必支付上述费用,但大多数情况下它们并不那么昂贵。