在Android中,onClick、onLongClick的触发是和ACTION_DOWN及ACTION_UP相关的,在时序上,如果我们在一个View中同时覆写了onClick、onLongClick及onTouchEvent的话,onTouchEvent是最先捕捉到ACTION_DOWN和ACTION_UP事件的,其次才可能触发onClick或者onLongClick。
核心代码:
package
cn.zengfansheng.touchandclick;
import
android.app.Activity;
import
android.os.Bundle;
import
android.util.Log;
import
android.view.MotionEvent;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.view.View.OnLongClickListener;
import
android.view.View.OnTouchListener;
import
android.widget.Button;
public
class
MainActivity
extends
Activity {
protected
static
final
String TAG
=
"MainActivity"
;
private
Button bt;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt
=
(Button)
this
.findViewById(R.id.bt);
// 1、单击事件
bt.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
Log.i(TAG,
"单击了"
);
}
});
// 2、触摸事件
bt.setOnTouchListener(
new
OnTouchListener() {
@Override
public
boolean
onTouch(View v, MotionEvent event) {
switch
(event.getAction()) {
case
MotionEvent.ACTION_DOWN
:
Log.i(TAG,
"MotionEvent.ACTION_DOWN、、、"
);
break
;
case
MotionEvent.ACTION_MOVE
:
Log.i(TAG,
"MotionEvent.ACTION_MOVE、、、"
);
break
;
case
MotionEvent.ACTION_UP
:
Log.i(TAG,
"MotionEvent.ACTION_UP、、、"
);
break
;
}
return
true;
}
});
// 3、长按事件
bt.setOnLongClickListener(
new
OnLongClickListener() {
@Override
public
boolean
onLongClick(View v) {
Log.i(TAG,
"LongClick..."
);
return
true;
}
});
}
}
结果:
只响应了触摸事件,点击事件和长点击事件并没有响应