[英]Implement double click for button in Android
How can I implement double click for a button in Android?如何在Android中实现双击按钮? Should I use OnDoubleTapListener?我应该使用 OnDoubleTapListener 吗?
int i = 0;
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
i++;
Handler handler = new Handler();
Runnable r = new Runnable() {
@Override
public void run() {
i = 0;
}
};
if (i == 1) {
//Single click
handler.postDelayed(r, 250);
} else if (i == 2) {
//Double click
i = 0;
ShowDailog();
}
}
});
private long lastTouchTime = 0;
private long currentTouchTime = 0;
.. ..
@Override
public void onClick(View view) {
lastTouchTime = currentTouchTime;
currentTouchTime = System.currentTimeMillis();
if (currentTouchTime - lastTouchTime < 250) {
Log.d("Duble","Click");
lastTouchTime = 0;
currentTouchTime = 0;
}
}
This is probably a good place to start:这可能是一个很好的起点:
Android: How to detect double-tap? Android:如何检测双击?
I recommend switching to a more native way like long press (answer to linked question) or something more creative (using multi-touch), unless you are bent on the Windows default double-click way of doing things?我建议切换到更原生的方式,如长按(链接问题的答案)或更具创意的方式(使用多点触控),除非您倾向于使用 Windows 默认的双击方式做事?
You may have a valid reason though - double clicking is after all faster than long press.你可能有正当理由虽然-双击毕竟不是长按快。
I wrote this for popping up a Toast message on a double click in a mapping application:我写这个是为了在地图应用程序中双击弹出 Toast 消息:
private long lastTouchTime = -1;
@Override
public boolean onTouchEvent(MotionEvent e, MapView mapView) {
GeoPoint p = null;
if (e.getAction() == MotionEvent.ACTION_DOWN) {
long thisTime = System.currentTimeMillis();
if (thisTime - lastTouchTime < 250) {
// Double click
p = mapView.getProjection().fromPixels((int) e.getX(), (int) e.getY());
lastTouchTime = -1;
} else {
// too slow
lastTouchTime = thisTime;
}
}
if (p != null) {
showClickedLocation(p);// Raise a Toast
}
return false;
}
This is a good site for performing double click... I used it and worked.这是一个执行双击的好网站...我使用它并工作。
http://mobile.tutsplus.com/tutorials/android/android-gesture/ http://mobile.tutsplus.com/tutorials/android/android-gesture/
I used it and worked:我使用它并工作:
public class DoubleClickTest extends Activity {
String TAG = "DoubleOrSingleClickTest";
private boolean waitDouble = true;
private static final int DOUBLE_CLICK_TIME = 350; // double click timer
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.double_click_test);
Button button = (Button) findViewById(R.id.buttonDoubleOrSingleClicked);
button.setOnClickListener(listenerDoubleOrSingle);
}
View.OnClickListener listenerDoubleOrSingle = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (waitDouble == true) {
waitDouble = false;
Thread thread = new Thread() {
@Override
public void run() {
try {
sleep(DOUBLE_CLICK_TIME);
if (waitDouble == false) {
waitDouble = true;
singleClick();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
} else {
waitDouble = true;
doubleClick();
}
}
};
// single event
private void singleClick() {
Log.i(TAG, "singleClick");
}
// double event
private void doubleClick() {
Log.i(TAG, "doubleClick");
}
}
It comes from " https://elingwange.iteye.com/blog/1613177 "它来自“ https://elingwange.iteye.com/blog/1613177 ”
You can create a DoubleTapListener by inheriting View.OnClickListener
and adding a Callback of your listener.您可以通过继承View.OnClickListener
并添加您的侦听器的回调来创建 DoubleTapListener。
MyDoubleClickListener.class MyDoubleClickListener.class
public class MyDoubleClickListener implements View.OnClickListener{
private boolean isRunning= false;
private int resetInTime =500;
private int counter=0;
private DoubleClickCallback listener;
public DoubleTapListener(Context context)
{
listener = (DoubleClickCallback)context;
}
@Override
public void onClick(View v) {
if(isRunning)
{
if(counter==1) //<-- makes sure that the callback is triggered on double click
listener.onDoubleClick(v);
}
counter++;
if(!isRunning)
{
isRunning=true;
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(resetInTime);
isRunning = false;
counter=0;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
}
DoubleClickCallback.class DoubleClickCallback.class
public interface DoubleClickCallback {
public void onDoubleClick(View v);
}
And you are done.你已经完成了。 You can use this Listener in any Activity.您可以在任何活动中使用此侦听器。
How do I use this DoubleClickListener in my Activity?我如何在我的活动中使用这个 DoubleClickListener?
Implement Callback in your activity and override the method.在您的活动中实现回调并覆盖该方法。
public class MainActivity extends AppCompatActivity implements MyDoubleClickListener{
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new DoubleTapListener(this)); //<-- Set listener
}
@Override
public void onDoubleClick(View v) {
// Toast to show double click
}
}
Important point is using this concept you can create any kind of listener (Triple-click listener)重要的一点是使用这个概念你可以创建任何类型的监听器(三击监听器)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.