Android 在文本视图上应用双击不起作用
我想在双击TextView时触发某些事件Android 在文本视图上应用双击不起作用,android,textview,double,Android,Textview,Double,我想在双击TextView时触发某些事件 final GestureDetector gestureDetector = new GestureDetector(context,new GestureDetector.SimpleOnGestureListener() { public boolean onDoubleTap(MotionEvent e) { Log.e("", "Open new activty here"); return true;
final GestureDetector gestureDetector = new GestureDetector(context,new GestureDetector.SimpleOnGestureListener() {
public boolean onDoubleTap(MotionEvent e) {
Log.e("", "Open new activty here");
return true;
}
});
TextView tv = (TextView) findViewById(R.id.editTextID);
tv.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
});
这将返回ontapevent我认为您需要实现它,请使用以下代码:
final GestureDetector gd = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener(){
//here is the method for double tap
@Override
public boolean onDoubleTap(MotionEvent e) {
//your action here for double tap e.g.
//Log.d("OnDoubleTapListener", "onDoubleTap");
return true;
}
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return true;
}
@Override
public boolean onDown(MotionEvent e) {
return true;
}
});
//here yourView is the View on which you want to set the double tap action
yourView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return gd.onTouchEvent(event);
}
});
虽然说在安卓系统中使用longclick更为常见
希望它有帮助我认为您需要实现它,请使用以下代码:
final GestureDetector gd = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener(){
//here is the method for double tap
@Override
public boolean onDoubleTap(MotionEvent e) {
//your action here for double tap e.g.
//Log.d("OnDoubleTapListener", "onDoubleTap");
return true;
}
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return true;
}
@Override
public boolean onDown(MotionEvent e) {
return true;
}
});
//here yourView is the View on which you want to set the double tap action
yourView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return gd.onTouchEvent(event);
}
});
虽然说在安卓系统中使用longclick更为常见
希望对您有所帮助您可能需要创建新的类实现Onclick。正常点击将延迟400毫秒,直到使用定时器检测到第二次点击。如果不存在400毫秒后的第二次点击,它将考虑一个TAP
public abstract class DoubleClickListener implements OnClickListener {
private Timer timer = null; //at class level;
private int DELAY = 400;
private static final long DOUBLE_CLICK_TIME_DELTA = 300;//milliseconds
long lastClickTime = 0;
@Override
public void onClick(View v) {
long clickTime = System.currentTimeMillis();
if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA){
processDoubleClickEvent(v);
} else {
processSingleClickEvent(v);
}
lastClickTime = clickTime;
}
public void processSingleClickEvent(final View v){
final Handler handler=new Handler();
final Runnable mRunnable=new Runnable(){
public void run(){
onSingleClick(v); //Do what ever u want on single click
}
};
TimerTask timertask=new TimerTask(){
@Override
public void run(){
handler.post(mRunnable);
}
};
timer=new Timer();
timer.schedule(timertask,DELAY);
}
public void processDoubleClickEvent(View v){
if(timer!=null)
{
timer.cancel(); //Cancels Running Tasks or Waiting Tasks.
timer.purge(); //Frees Memory by erasing cancelled Tasks.
}
onDoubleClick(v);//Do what ever u want on Double Click
}
public abstract void onSingleClick(View v);
public abstract void onDoubleClick(View v);
}
您可能需要创建新的类实现Onclick。正常点击将延迟400毫秒,直到使用定时器检测到第二次点击。如果不存在400毫秒后的第二次点击,它将考虑一个TAP
public abstract class DoubleClickListener implements OnClickListener {
private Timer timer = null; //at class level;
private int DELAY = 400;
private static final long DOUBLE_CLICK_TIME_DELTA = 300;//milliseconds
long lastClickTime = 0;
@Override
public void onClick(View v) {
long clickTime = System.currentTimeMillis();
if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA){
processDoubleClickEvent(v);
} else {
processSingleClickEvent(v);
}
lastClickTime = clickTime;
}
public void processSingleClickEvent(final View v){
final Handler handler=new Handler();
final Runnable mRunnable=new Runnable(){
public void run(){
onSingleClick(v); //Do what ever u want on single click
}
};
TimerTask timertask=new TimerTask(){
@Override
public void run(){
handler.post(mRunnable);
}
};
timer=new Timer();
timer.schedule(timertask,DELAY);
}
public void processDoubleClickEvent(View v){
if(timer!=null)
{
timer.cancel(); //Cancels Running Tasks or Waiting Tasks.
timer.purge(); //Frees Memory by erasing cancelled Tasks.
}
onDoubleClick(v);//Do what ever u want on Double Click
}
public abstract void onSingleClick(View v);
public abstract void onDoubleClick(View v);
}
一个懒惰的实现
private static final long DOUBLE_CLICK_TIME_DELTA = 300;//milliseconds
long lastClickTime = 0;
TextView tv = (TextView) findViewById(R.id.editTextID);
tv.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
long clickTime = System.currentTimeMillis();
if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA){
lastClickTime = 0;
//double click
} else {
//single click
}
lastClickTime = clickTime;
}
});
快乐编码是懒惰的实现之一
private static final long DOUBLE_CLICK_TIME_DELTA = 300;//milliseconds
long lastClickTime = 0;
TextView tv = (TextView) findViewById(R.id.editTextID);
tv.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
long clickTime = System.currentTimeMillis();
if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA){
lastClickTime = 0;
//double click
} else {
//single click
}
lastClickTime = clickTime;
}
});
快乐编码可能重复可能重复不起作用。双击会发生什么?[1] 点击一下就进来了。。。没有以前的。。。因此该方法被调用。[2] 然后第二次点击进来。。。但一切都已明朗。请看下面。不起作用。双击会发生什么?[1] 点击一下就进来了。。。没有以前的。。。因此该方法被调用。[2] 然后第二次点击进来。。。但一切都已明朗。请看下面。很好的解决方案,很有效。也许有点重,但足够了。天哪!很好的解决方案,很有效。也许有点重,但足够了。天哪!