实现接口View.OnTouchListener,并重写onTouch()方法

import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
 * Created by HeTingwei on 2018/4/30.
public class MyClickListener implements View.OnTouchListener {
    private static int timeout=400;//双击间四百毫秒延时
    private int clickCount = 0;//记录连续点击次数
    private Handler handler;
    private MyClickCallBack myClickCallBack;
    public interface MyClickCallBack{
        void oneClick();//点击一次的回调
        void doubleClick();//连续点击两次的回调
    public MyClickListener(MyClickCallBack myClickCallBack) {
        this.myClickCallBack = myClickCallBack;
        handler = new Handler();
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            clickCount++;
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    if (clickCount == 1) {
                        myClickCallBack.oneClick();
                    }else if(clickCount==2){
                        myClickCallBack.doubleClick();
                    handler.removeCallbacksAndMessages(null);
                    //清空handler延时,并防内存泄漏
                    clickCount = 0;//计数清零
            },timeout);//延时timeout后执行run方法中的代码
        return false;//让点击事件继续传播,方便再给View添加其他事件监听

3.使用举例

两个用法例子:
使用例子1:使用匿名类(以下为实现添加单双击监听的代码片段)

View button= findViewById(R.id.button);
view.setOnTouchListener(new MyClickListener
 (new MyClickListener.MyClickCallBack() {
            @Override
            public void oneClick() {
                Toast.makeText(MainActivity.this, "单击", 
                Toast.LENGTH_SHORT).show();
            @Override
            public void doubleClick() {
                Toast.makeText(MainActivity.this, "双击", 
                Toast.LENGTH_SHORT).show();

使用例子2:Activity实现单双击接口(以下为实现添加单双击监听的完整代码)

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity implements
 MyClickListener.MyClickCallBack{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        View button = findViewById(R.id.button);
        button.setOnTouchListener(new MyClickListener(this));
    @Override
    public void oneClick() {
        Toast.makeText(this, "单击", Toast.LENGTH_SHORT).show();
    @Override
    public void doubleClick() {
        Toast.makeText(this, "双击", Toast.LENGTH_SHORT).show();

4.扩展(三击及其以上监听)

聪明的同学应该可以自己按我的代码依样画葫芦,自己就能将三击实现,但是这里还是写一下。
三击监听的话在MyClickListener 如下位置添加对应代码即可,同时使用的地方同样添加对应方法即可。同理四击,需要注意的是时延理当延长了。当然三击四击一般都用不到,所以就简略的写一下了。

public interface MyClickCallBack{ void oneClick();//点击一次的回调 void doubleClick();//连续点击两次及其以上的回调 void threeClick();//连续点击三次及其以上的回调
  @Override
                public void run() {
                    if (clickCount == 1) {
                        myClickCallBack.oneClick();
                    }else if(clickCount==2){
                        myClickCallBack.doubleClick();
                    }else if(clickCount==3){
                    myClickCallBack.threeClick()
                    handler.removeCallbacksAndMessages(null);
                    //清空handler延时,并防内存泄漏
                    clickCount = 0;//计数清零
            },timeout);//延时timeout后执行run方法中的代码
1.思路和效果 思路:首先需要判别用户是单击还是双击:单击:用户点击一次后,一段时间内不再点击双击:用户点击一次后,立刻再次点击一次,两次点击时间短所以需要延时,去判断在一段时间内用户点击了几次首先,考虑到使用线程记录时间,但是开启线程会消耗资源,所以使用Handler来完成延时的记录,但是Han... class myOnGestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onDoubleTap(MotionEvent e) { mLoadingListener.onFinishedLoading(0);//取消点赞 是一个接口 //已经点赞 更换图片 1:已经点赞 0 :没有点赞 if (likeType.equals(1)){ String getLike = tvLi
第一种创建 一个抽象的类 DoubleClickListener  实现 OnClickListenerpublic abstract class DoubleClickListener implements View.OnClickListener { private static final long DOUBLE_TIME = 1000; private static lo...
android中,经常需要使用双击来响应一些操作,此时就可以使用系统提供的GestureDetector类来实现。 在GestureDetector类中,定义了OnGestureListener 和 OnDoubleTapListener 两个接口,可以根据需要分别实现不同的接口。 其中 OnGestureListener 对象的注入是通过构造方法的方式,而 OnDoubleTapListener 对象的注入是通过set方法设置的,见如下图片。 (android也提供了一个实现这两个接口的类来简化
原理:双击,及时两次点击时间差比较小的单击事件,所以可以对单击事件进行加工处理,实现双击事件,或多击事件。 首先是双击事件: 1. 首先定义一个记录第一次点击事件的时间的变量private long firstClickTime = 0; 然后是就是对单击的事件进行监听修改。 逻辑为:当单击后,事件会对firstClickTime这个变量进行比较,如果是第一次单击,系统会记录这个单击时间。如果
import android.os.Handler; import android.view.MotionEvent; import android.view.View; * 双击与单机监听 public class OnDoubleClickListener implements View.OnTouchListener { private Handler handler = new Handler(); private int count = 0;//
@OnClick(R.id.google_btn) public void clickGoogle_btn(){ //实现数组的位移操作,点击一次,左移一位,末尾补上当前开机时间(cpu时间) System.arraycopy(mHits,1,mHits,0,mHits.length-1); mHits[mHits.length-1]=SystemClock.uptimeMillis(); if(500>(Sys import android.os.Handler; import android.view.MotionEvent; import android.view.View; import java.util.concurrent.atomic.AtomicInteger; public abstrac... 4. 使用该自定义控件,在布局文件中加入该控件,并在Activity中设置相应的位置。 5. 如果需要在屏幕上固定显示该悬浮按钮,可以使用WindowManager将该控件显示在屏幕上。 以上步骤是实现自定义悬浮按钮的大致流程,如果需要详细的代码实现可以结合网上的相关教程。