Android OnTouchListener OnClickListenerクリックとダブルクリックを実現

3098 ワード

package com.kaikeba.android.smallVideo.lisener;

import android.os.Handler;
import android.view.View;

public class DoubleClickListener implements View.OnClickListener {
    //        
    private int clickCount = 0;
    private Handler handler;
    private DoubleClickCallBack myClickCallBack;

    public interface DoubleClickCallBack {
        //       
        void oneClick(View view);

        //         
        void doubleClick(View view);

    }

    public DoubleClickListener(DoubleClickListener.DoubleClickCallBack myClickCallBack) {
        this.myClickCallBack = myClickCallBack;
        handler = new Handler();
    }

    @Override
    public void onClick(View v) {
        clickCount++;
        //         
        int timeout = 200;
        handler.postDelayed(() -> {
            if (clickCount == 1) {
                myClickCallBack.oneClick(v);
            } else if (clickCount == 2) {
                myClickCallBack.doubleClick(v);
            }
           //  handler  ,      
            handler.removeCallbacksAndMessages(null);
            //    
            clickCount = 0;
        }, timeout);//  timeout   run      
    }
}
package com.kaikeba.android.smallVideo.lisener;

import android.os.Handler;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

public class DoubleTouchListener implements View.OnTouchListener {
    //        
    private int clickCount = 0;
    private Handler handler;
    private DoubleClickCallBack myClickCallBack;
    private static final String TAG = "DoubleTouchListener";
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int action = event.getAction();
        switch (action){
            case MotionEvent.ACTION_DOWN:

                break;
            case MotionEvent.ACTION_MOVE:
                break;
            case MotionEvent.ACTION_UP:
                float x= event.getX();
                float y= event.getY();
                Log.e(TAG, "onTouch: "+x+"    y:"+y );
                clickCount++;
                //         
                int timeout = 200;
                handler.postDelayed(() -> {
                    if (clickCount == 1) {
                        myClickCallBack.oneClick(v);
                    } else if (clickCount == 2) {
                        myClickCallBack.doubleClick(v,x,y);
                    }
                    //  handler  ,      
                    handler.removeCallbacksAndMessages(null);
                    //    
                    clickCount = 0;
                }, timeout);//  timeout   run      
                break;
        }
        return false;
    }

    public interface DoubleClickCallBack {
        //       
        void oneClick(View view);

        //         
        void doubleClick(View view,float x,float y);

    }

    public DoubleTouchListener(DoubleTouchListener.DoubleClickCallBack myClickCallBack) {
        this.myClickCallBack = myClickCallBack;
        handler = new Handler();
    }


}