实现接口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);
clickCount = 0;
},timeout);
return false;
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);
clickCount = 0;
},timeout);
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将该控件显示在屏幕上。
以上步骤是实现自定义悬浮按钮的大致流程,如果需要详细的代码实现可以结合网上的相关教程。