在上篇 android处理单击双击和滑动事件 里有介绍双击,可如果需要自己控制一个双击事件的单击间隔时间,怎么弄呢?
其实就是在单击之后,在间隔时间内等候下次点击再次发生,我们可以用线程处理等候时间,如果时间到了还没有下个点击,那就是取消双击的可能了,可以参考下面的代码:
原创内容如转载请注明:来自 阿权的书房
其实就是在单击之后,在间隔时间内等候下次点击再次发生,我们可以用线程处理等候时间,如果时间到了还没有下个点击,那就是取消双击的可能了,可以参考下面的代码:
package com.aslibra.test;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.GestureDetector.OnGestureListener;
import android.widget.LinearLayout;
import android.widget.TextView;
/*
* 自定义双击等待时间
* http://www.aslibra.com/blog/post/android_doubleClick.php
*/
public class touchGesture extends Activity implements OnGestureListener {
private LinearLayout main;
private TextView viewA;
private boolean waitDoubleClick = false;
private static final int DOUBLE_CLICK_TIME = 350;
private GestureDetector gestureScanner;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gestureScanner = new GestureDetector(this);
main = new LinearLayout(this);
main.setBackgroundColor(Color.GRAY);
main.setLayoutParams(new LinearLayout.LayoutParams(320,480));
main.setOrientation(LinearLayout.VERTICAL);
viewA = new TextView(this);
viewA.setBackgroundColor(Color.YELLOW);
viewA.setTextColor(Color.BLACK);
viewA.setTextSize(16);
viewA.setLayoutParams(new LinearLayout.LayoutParams(320,50));
main.addView(viewA);
setContentView(main);
}
@Override
public boolean onTouchEvent(MotionEvent me) {
return gestureScanner.onTouchEvent(me);
}
@Override
public boolean onDown(MotionEvent e) {
//viewA.setText("-" + "DOWN" + "-");
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//viewA.setText("-" + "FLING" + "- "+velocityX + "- "+velocityY);
Log.v("test", "onFling "+e1.getX()+" "+e2.getX());
return true;
}
@Override
public void onLongPress(MotionEvent e) {
//viewA.setText("-" + "LONG PRESS" + "-");
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
//viewA.setText("-" + "SCROLL" + "- "+distanceX + "- "+distanceY);
Log.v("test", "onScroll "+e1.getX()+" "+e2.getX());
return true;
}
@Override
public void onShowPress(MotionEvent e) {
//viewA.setText("-" + "SHOW PRESS" + "-");
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
//viewA.setText("-" + "SINGLE TAP UP" + "-"+ i++);
Log.v("test", "onSingleTapUp "+e.getX()+" "+e.getY());
if(!waitDoubleClick){
waitDoubleClick = true;
Log.v("test", "waitDoubleClick");
//等待下次点击
Thread checkUpdate = new Thread() {
public void run() {
//固定时间后如果还没有改变状态,说明是单击,取消等待状态
try {
sleep( DOUBLE_CLICK_TIME );
if(waitDoubleClick){
waitDoubleClick = false;
Log.v("test", "cancle waitDoubleClick");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
checkUpdate.start();
viewA.setText("");
}else{
//双击
waitDoubleClick = false;
onDoubleClick();
}
return true;
}
//双击事件
private void onDoubleClick(){
viewA.setText("dobule click");
Log.v("test", "DoubleClick");
}
}
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.GestureDetector.OnGestureListener;
import android.widget.LinearLayout;
import android.widget.TextView;
/*
* 自定义双击等待时间
* http://www.aslibra.com/blog/post/android_doubleClick.php
*/
public class touchGesture extends Activity implements OnGestureListener {
private LinearLayout main;
private TextView viewA;
private boolean waitDoubleClick = false;
private static final int DOUBLE_CLICK_TIME = 350;
private GestureDetector gestureScanner;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gestureScanner = new GestureDetector(this);
main = new LinearLayout(this);
main.setBackgroundColor(Color.GRAY);
main.setLayoutParams(new LinearLayout.LayoutParams(320,480));
main.setOrientation(LinearLayout.VERTICAL);
viewA = new TextView(this);
viewA.setBackgroundColor(Color.YELLOW);
viewA.setTextColor(Color.BLACK);
viewA.setTextSize(16);
viewA.setLayoutParams(new LinearLayout.LayoutParams(320,50));
main.addView(viewA);
setContentView(main);
}
@Override
public boolean onTouchEvent(MotionEvent me) {
return gestureScanner.onTouchEvent(me);
}
@Override
public boolean onDown(MotionEvent e) {
//viewA.setText("-" + "DOWN" + "-");
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//viewA.setText("-" + "FLING" + "- "+velocityX + "- "+velocityY);
Log.v("test", "onFling "+e1.getX()+" "+e2.getX());
return true;
}
@Override
public void onLongPress(MotionEvent e) {
//viewA.setText("-" + "LONG PRESS" + "-");
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
//viewA.setText("-" + "SCROLL" + "- "+distanceX + "- "+distanceY);
Log.v("test", "onScroll "+e1.getX()+" "+e2.getX());
return true;
}
@Override
public void onShowPress(MotionEvent e) {
//viewA.setText("-" + "SHOW PRESS" + "-");
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
//viewA.setText("-" + "SINGLE TAP UP" + "-"+ i++);
Log.v("test", "onSingleTapUp "+e.getX()+" "+e.getY());
if(!waitDoubleClick){
waitDoubleClick = true;
Log.v("test", "waitDoubleClick");
//等待下次点击
Thread checkUpdate = new Thread() {
public void run() {
//固定时间后如果还没有改变状态,说明是单击,取消等待状态
try {
sleep( DOUBLE_CLICK_TIME );
if(waitDoubleClick){
waitDoubleClick = false;
Log.v("test", "cancle waitDoubleClick");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
checkUpdate.start();
viewA.setText("");
}else{
//双击
waitDoubleClick = false;
onDoubleClick();
}
return true;
}
//双击事件
private void onDoubleClick(){
viewA.setText("dobule click");
Log.v("test", "DoubleClick");
}
}
原创内容如转载请注明:来自 阿权的书房
收藏本文到网摘
android处理单击双击和滑动事件
android获得状态栏和标题栏高度
