我希望双击textview,因为我使用了以下代码
但它仍无效:(
TextView txtOne;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtOne = (TextView) findViewById(R.id.txtOne);
txtOne.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
System.out.println("DRAG");
return gestureDetector.onTouchEvent(event);
}
});
}
final GestureDetector gestureDetector = new GestureDetector(
new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDoubleTap(MotionEvent e) {
System.out.println("Double Tap");
return super.onDoubleTap(e);
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
System.out.println("One Click");
return super.onSingleTapUp(e);
}
});
只有拖动是在调用,但不是“双击”和“一键”从未调用
答案 0 :(得分:2)
尝试以下步骤。
在您的活动中写下以下代码。
// initialize the Gesture Detector
gd = new GestureDetector(this,new OnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
});
// set the on Double tap listener
gd.setOnDoubleTapListener(new OnDoubleTapListener() {
@Override
public boolean onDoubleTap(MotionEvent e) {
Toast.makeText(SplashActivity.this,"Double Tap",Toast.LENGTH_LONG).show();
return false;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
// if the second tap hadn't been released and it's being moved
return false;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
});
编写以下活动代码。此处gd
将为GestureDetector
对象。
txt.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
gd.onTouchEvent(event);
return false;
}
});
答案 1 :(得分:1)
答案 2 :(得分:1)
对于SimpleGestureDetector
,您需要覆盖onDown()
并返回true
以触发双击检测器。
您是否使用
GestureDetector.OnGestureListener
,这是实施返回onDown()
的{{1}}方法的最佳做法。这是因为所有手势都以true
消息开头。如果您从onDown()
返回false
,默认为onDown()
,则系统会假定您要忽略其余的手势,而GestureDetector.SimpleOnGestureListener
的其他方法则永远不会被叫。这可能会在您的应用中导致意外问题。您应该从GestureDetector.OnGestureListener
返回false
的唯一时间是您是否真的想忽略整个手势。
来源:http://developer.android.com/training/gestures/detector.html
答案 3 :(得分:0)
这是一个用于执行双击的好网站...我使用它并且工作了 doubleCLICK