Tôi đã tạo một thành phần tùy chỉnh với cả onTouchListener và bộ dò cử chỉ, Tôi đặt thành phần tùy chỉnh trong tệp xml của MainActivity cũng có cả onTouchEvent và bộ dò tìm cử chỉ. Tôi muốn phát hiện các vòi duy nhất trên thành phần tùy chỉnh và nhấn lâu trên MainActivity, nhưng có vẻ như bằng cách nào đó các trình nghe cảm ứng tương tác và các vòi duy nhất không bao giờ bị phát hiện.OnSingleTapUp của SimpleOnGestureListener không bao giờ được gọi là
MainActivity.java:
public class MainActivity extends ActionBarActivity {
private GestureDetector detector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
detector = new GestureDetector(this, new LongPressDetector());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
detector.onTouchEvent(event);
int action = event.getActionMasked();
switch (action){
case MotionEvent.ACTION_DOWN:{
Log.d("TouchEvent", "Action_Down at MainActivity.java");
break;
}
}
return super.onTouchEvent(event);
}
private class LongPressDetector extends GestureDetector.SimpleOnGestureListener{
@Override
public boolean onDown(MotionEvent e) {
Log.d("TouchEvent", "onDown at MainActivity.java");
return super.onDown(e);
}
@Override
public void onLongPress(MotionEvent e) {
Log.d("TouchEvent", "onLongPress at MainActivity.java");
super.onLongPress(e);
}
}
}
CustomView.java:
public class CustomView extends RelativeLayout {
private GestureDetector detector;
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context c){
LayoutInflater layoutInflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layoutInflater.inflate(R.layout.customview, this);
detector = new GestureDetector(c, new TapDetector());
this.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
detector.onTouchEvent(event);
int action = event.getActionMasked();
switch (action){
case MotionEvent.ACTION_DOWN:{
Log.d("TouchEvent", "Action_Down at CustomView.java");
break;
}
}
return false;
}
});
}
private class TapDetector extends GestureDetector.SimpleOnGestureListener{
@Override
public boolean onDown(MotionEvent e) {
Log.d("TouchEvent", "onDown at CustomView.java");
return super.onDown(e);
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.d("TouchEvent", "onSingleTapUp at CustomView.java");
return super.onSingleTapUp(e);
}
}
}
thêm Log.d trong phương pháp onTouch của bạn và xem những sự kiện – pskink
tôi đã làm, nếu tôi gõ vào phần tùy chỉnh, các sự kiện bắn theo thứ tự là: onDown tại CustomView. java; Action_Down tại CustomView.java; onDown tại MainActivity.java; Action_Down tại MainActivity.java; nhưng không có onSingleTapUp – daxter1992
và bây giờ đọc tài liệu về những gì omTouch trả về – pskink