Android 为View实现双击效果

Android 默认是没有双击事件的,不知道为什么~~..  不多说,直接上代码。

首先增加一个双击事件接口:

public interface OnDoubleClickListener {
    public void OnSingleClick(View v);
    public void OnDoubleClick(View v);
}
  

然后再添加一个方法:

/**
 * 注册一个双击事件
 * 改自网友的,增加  Handler  处理,如果不加这个,会引起线程安全之类错误。<br>     */
public static void registerDoubleClickListener(View view, final OnDoubleClickListener listener){
    if(listener==null) return;
    view.setOnClickListener(new View.OnClickListener() {
        private static final int DOUBLE_CLICK_TIME = 350;        //双击间隔时间350毫秒
        private boolean waitDouble = true
         
        private Handler handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                listener.OnSingleClick((View)msg.obj);
            }
             
        };
         
        //等待双击
        public void onClick(final View v) {
            if(waitDouble){
                waitDouble = false;        //与执行双击事件
                new Thread(){
 
                    public void run() {
                        try {
                            Thread.sleep(DOUBLE_CLICK_TIME);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }    //等待双击时间,否则执行单击事件
                        if(!waitDouble){
                            //如果过了等待事件还是预执行双击状态,则视为单击
                            waitDouble = true;
                            Message msg = handler.obtainMessage(); 
                            msg.obj = v;
                            handler.sendMessage(msg);
                        }
                    }
                     
                }.start();
            }else{
                waitDouble = true;
                listener.OnDoubleClick(v);    //执行双击
            }
        }
    });
}

  

最后注册事件:

ImageView imageview = (ImageView)findViewById(R.id.imageview1);registerDoubleClickListener(imageview, this);

  

  

posted @   里沃特  阅读(6028)  评论(1编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2007-12-28 ASP.NET 的数据库与缓存问题
点击右上角即可分享
微信分享提示