精华内容
下载资源
问答
  • 主要介绍了android 控件同时监听单击和双击实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • android监听双击屏幕

    2017-08-31 13:57:16
    android双击屏幕,触发原生toast提示信息,弹出“双击”,监听点击事件判断,第一次与第二次的时间差,判断是否为双击,如果双击则触发刷双击事件,否则触发点击事件
  • 主要介绍了Android 双击返回键退出程序的方法总结的相关资料,需要的朋友可以参考下
  • 简单的利用handler 处理控件的单双击监听判断,供新手参考。求轻喷~~
  • 下面小编就为大家带来一篇Android 自定义View实现单击和双击事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • android单击、双击事件

    2015-07-21 21:32:05
    安卓控件单击、双击事件共存,下载附件运行即可
  • Android 实现双击

    2014-06-27 14:19:56
    Android 双击的简单实现。
  • 实现android对同一button单击双击事件的区分及其监控
  • DBClickBlocker 单击事件防止变成双击事件~ avoid fast click event in android
  • 本文主要介绍 Android屏幕双击事件的捕获,这里整理了相关资料,并附示例代码,有兴趣的小伙伴可以参考下
  • 主要介绍了Android开发实现控件双击事件的监听接口封装类,需要的朋友可以参考下
  • Android实现双击事件

    2018-05-08 13:28:17
    能实现双击事件,双击单击调用对应方法。快来下载吧,不懂可以留言
  • android 单击双击事件

    2015-11-30 12:07:46
    android最近公司项目要用到imageview的单机双击事件,本人新手一枚,到网上查了好多资料,发现android并没有双击这么一说,都要自己去重写方法,这些都不会啊,咋整?只好想了一个土办法:原理是用时间来判断,当我点...
  • 一个简单易用的导航栏TitleBar,可以轻松实现IOS导航栏的各种效果,下面这篇文章主要给大家介绍了关于Android如何实现双击TitleBar回顶部功能的相关资料,文中给出了详细的示例代码,需要的朋友可以参考借鉴,下面来...
  • 主要为大家详细介绍了Android实现双击返回键退出应用的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Android双击事件拦截

    千次阅读 2018-01-02 20:25:54
    下文我们介绍两种双击事件拦截的方式1.通过Android的事件分发机制进行拦截(dispatchTouchEvent)话不多说,直接上代码: /** 判断是否是快速点击 */ private static long lastClickTime; public static boolean ...

    下文我们介绍两种双击事件拦截的方式

    1.通过Android的事件分发机制进行拦截(dispatchTouchEvent)

    话不多说,直接上代码:

        /** 判断是否是快速点击 */
        private static long lastClickTime;
        public static boolean isFastDoubleClick() {
            long time = System.currentTimeMillis();
            long timeD = time - lastClickTime;
            if (0 < timeD && timeD < 1000) {
                return true;
            }
            lastClickTime = time;
            return false;
        }
        /** 判断触摸时间派发间隔 */
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            if (ev.getAction() == MotionEvent.ACTION_DOWN) {
                if (isFastDoubleClick()) {
                    return true;
                }
            }
            return super.dispatchTouchEvent(ev);
        }

    用法就是直接在你需要拦截双击事件的类中加入这两个函数,系统会自动调用dispatchTouchEvent进行事件拦截,屏蔽掉双击事件,可以通过调整上述的时间达到你想要的效果
    缺点就是加入后的整个activity都会屏蔽掉双击事件,可能会影响其他组件的正常使用

    2.通过一个工具类来使用双击函数

        //判断是否是快速点击
        private static long lastClickTime = 0L; //上一次点击的时间
        public static boolean isFastDoubleClick() {
            long time = System.currentTimeMillis();
            long timeD = time - lastClickTime;
            if(timeD<1000){
                //写自己的双击逻辑
                return true;
            }
            lastClickTime = time;
            return false;
        }

    使用方法就是将这个函数放到一个工具类中,在你需要进行双击事件拦截时,直接调用这个函数进行判断即可,有没有很方便

    展开全文
  • 双击放大文本,解决显示不全,底部留空白的问题以及滑动会直接退出的问题
  • 本文主要介绍Android 实现双击退出,这里给大家提供代码示例,方便大家理解查看,有需要的小伙伴可以参考下
  • 主要介绍了Android 高仿微信朋友圈动态支持双击手势放大并滑动查看图片效果,需要的朋友参考下
  • 我们在app中使用webView控件的时候,为我们提供了更多的方便,同时也是有很多问题需要我们解决的,就如今天这个问题,web view中有输入框,当我双击输入框的时候,就会出现复制剪切等操作的栏,这个很影响用户体验,...

    我们在app中使用webView控件的时候,为我们提供了更多的方便,同时也是有很多问题需要我们解决的,就如今天这个问题,web view中有输入框,当我双击输入框的时候,就会出现复制剪切等操作的栏,这个很影响用户体验,因此我们需要把它禁掉。

    我们需要自定义webView:

    
    public class MyWebView extends WebView {
    
        private long lastTime = 0L;
    
        public MyWebView(Context context) {
            super(context);
        }
    
        public MyWebView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    long currentTime = System.currentTimeMillis();
                    long time = currentTime - lastTime;
                    if (time < 300) {
                        lastTime = currentTime;
                        return true;
                    } else {
                        lastTime = currentTime;
                    }
                    break;
            }
            return super.onTouchEvent(event);
        }
    
    

    然后使用我们自定义的webView就可以了:

    <MyWebView
        android:id="@+id/activity_comment_web"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    本人菜鸟一个,有什么不对的地方希望大家指出评论,大神勿喷,希望大家一起学习进步!

    展开全文
  • android view 单击、双击和移动事件处理
  • 主要介绍了Android实现ImageView图片双击放大及缩小的相关资料,需要的朋友可以参考下
  • Android 最省代码的双击判断

    千次阅读 2017-12-26 09:44:04
    前言:我们在做项目的时候,经常会碰到这种情况:一个控件的点击事件,当点击速度过快的时候——一般是双击,点击事件会响应两次,而Android系统中没有双击这个判断,这个时候就需要我们自己来写一个,于是在网上看...

    前言:我们在做项目的时候,经常会碰到这种情况:一个控件的点击事件,当点击速度过快的时候——一般是双击,点击事件会响应两次,而Android系统中没有双击这个判断,这个时候就需要我们自己来写一个,于是在网上看了一下。思路一般是保存按钮的点击时间,判断时间差,以此用来判断是否是双击,而在做项目的时候,发现有个不方便的地方,每次点击事件中都需要写一次,于是,为了简化代码,我在此基础上做了些许改动,能够简化些许代码,废话少说,看代码:

    import android.app.Activity;
    import android.util.SparseArray;
    import android.view.View;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import io.reactivex.Flowable;
    import io.reactivex.schedulers.Schedulers;
    
    /**
     * 点击事件的工具类
     */
    
    public class ClickUtil {
    
        //activity中的view的集合
        private static Map<Activity, SparseArray<Long>> viewIdMap = new HashMap<>();
    
        public static boolean isDoubleClick(Activity activity, View view) {
            return isDoubleClick(activity, 1000, view);
        }
    
        //遍历当前activity内的view对应的点击时间
        public static boolean isDoubleClick(Activity activity, long time, View view) {
    
            //判断当前activity是否有对应的数据
            if (!viewIdMap.containsKey(activity)) {
                SparseArray<Long> viewIdArray = new SparseArray<>();
                viewIdArray.put(view.getId(), System.currentTimeMillis());
                viewIdMap.put(activity, viewIdArray);
                return false;
            }
    
            //view对应的点击时间数据
            SparseArray<Long> viewIdArray = viewIdMap.get(activity);
    
            //rxJava循环
            return Flowable.just(viewIdArray).subscribeOn(Schedulers.newThread()) //子线程内
                    //遍历输出view的id:转换为string格式,long格式在null值的情况下会报错
                    .map(longSparseArray -> String.valueOf(viewIdArray.get(view.getId())))
                    .to(longObservable -> { //view的id
                        String viewTime = longObservable.blockingFirst(); //获取view对应的点击时间
                        if (viewTime.equals("null")) { //转换为string格式,默认为 "null" 值
                            viewIdArray.put(view.getId(), System.currentTimeMillis());
                            return false;
                        } else {
                            long lastClickTime = System.currentTimeMillis();
                            if (lastClickTime - Long.parseLong(viewTime) < time) {
                                viewIdArray.put(view.getId(), lastClickTime);
                                return true;
                            }
                            viewIdArray.put(view.getId(), lastClickTime);
                            return false;
                        }
                    });
        }
    
        //移除view的数据
        public static void removeClickView(Activity activity) {
            if (viewIdMap.containsKey(activity)) {
                viewIdMap.remove(activity);
            }
        }
    }
    


    双击判断与网络的大部分一样,通过判断点击事件差来判断是否是双击,而在其中做的改良是,保存所有按钮的点击时间,简化代码;

    用法:

    public void onClick(View view) {
            //判断是否是双击:是双击则直接退出
            if (ClickUtil.isDoubleClick(this, view)) {
                return;
            }
            switch (view.getId()) {
                case R.id.one:
                   	
                    break;
                case R.id.two:
                  	
                    break;
                case R.id.three:
                    
                    break;
                case R.id.four:
                   
                    break;
                case R.id.five:
                    
                    break;
            }
        }
    这样写就简单多了,至少不用在每个点击事件当中都写一次,当然,这个只是写了onclick里面的判断;

    最后,别忘了清除数据:

        @Override
        protected void onDestroy() {
            super.onDestroy();
            //移除当前activity的点击
            ClickUtil.removeClickView(this);
        }
    这段代码可以写一个BaseActivity用来统一父类方法,就不用在每个activity中写一遍;
    转载请保留原文地址;

    展开全文
  • android应用触摸两次返回键退出应用,两秒内触摸两次返回键退出(三种实现方式:线程、计时器、判断超时)
  • Android在web view中动态实现双击全屏(隐藏标题栏状态栏),双击屏幕判断标题栏状态栏是否存在,如果存在就隐藏,反之,不存在就显示。完整源码下载即用。
  • Android实现图片手势缩放、移动、双击放大缩小。
  • 为了实现对Android任意控件和按键进行双击事件的监听,所以写了一个可以在代码中任意移植的解决方法。一、解决思路为了实现双击事件的监听,首先需要一个线程来执行两次点击事件的判断,决定是否属于一次双击事件,...

    为了实现对Android任意控件和按键进行双击事件的监听,所以写了一个可以在代码中任意移植的解决方法。

    一、解决思路

    为了实现双击事件的监听,首先需要一个线程来执行两次点击事件的判断,决定是否属于一次双击事件,为了可以实现多次监听,所以在线程中是一个死循环,避免开无数个线程;然后将判断结果通过handler传递出去,由handler对message中携带的boolean数据进行判断,决定回调双击事件监听器中的双击或单击方法,监听器中的事件由用户覆写;最后在自己想要添加双击事件监听的控件或按键的点击事件监听器中创建一个双加事件管理器并启动就可以了。

    二、准备工作

    1.创建双击事件监听器接口

    /**
     * Created by 明月春秋 on 2017/11/18.
     * 负责对是否双击事件结果的回调监听器
     * 方法:
     *      1.onSinglePress:用于处理单击事件
     *      2.onDoublePress:用于处理双击事件
     */
    
    public interface OnDoubleClickListener {
    
        /**
         * 用于处理单击事件
         */
        public void onSinglePress();
    
        /**
         * 用于处理双击事件
         */
        public void onDoublePress();
    }

    2.创建双击事件处理handler,用来决定是执行监听器中的双击事件还是单击事件

    /**
     * Created by 明月春秋 on 2017/11/18.
     * 负责处理双击事件的handler
     * 方法:
     *      1.setDoubleRunnable:设置handler处理所在的线程执行体
     */
    
    public class DoubleHandler extends Handler {
    
        private OnDoubleClickListener mListener;//对是否双击结果的回调监听器
        private DoubleRunnable mDoubleRunnable;//负责双击事件的线程执行体
    
        /**
         * 双击事件处理器的构造函数
         * @param listener
         *          对是否双击结果的回调监听器
         */
        public DoubleHandler(OnDoubleClickListener listener){
            super(Looper.getMainLooper());
            this.mListener = listener;
        }
    
        @Override
        public void handleMessage(Message msg) {
            if ((boolean)msg.obj){
                mListener.onDoublePress();
            }
            else {
                mListener.onSinglePress();
            }
            //通知双击事件线程执行体,事件已处理完
            mDoubleRunnable.setIsStarted(false);
        }
    
        /**
         * 设置handler处理所在的线程执行体
         * @param doubleRunnable
         *          传入的当前线程执行体
         */
        public void setDoubleRunnable(DoubleRunnable doubleRunnable){
            this.mDoubleRunnable = doubleRunnable;
        }
    }

    3.创建执行双击事件判断的线程执行体,在其中进行死循环,一直等待用户的点击,并对相关运行状态进行判断,将双击事件的判断结果发送给前面的DoubleHandler 进行处理

    /**
     * Created by 明月春秋 on 2017/11/18.
     * 负责双击事件的线程执行体
     * 方法:
     *      1.setPreparedState:设置当前双击事件的执行状态
     *      2.setIsStarted:设置线程是否处于一次双击事件判断的阻塞之中
     *      3.setDoubleSpan:设置用于判断双击的间隔时间
     */
    
    public class DoubleRunnable implements Runnable {
    
        private DoubleHandler mHandler;//处理点击事件的handler
        private boolean isStarted = false;//表示线程是否正处于阻塞中
        private boolean isPrepared = false;//表示是否已准备好启动线程
        private boolean isDoubleClicked = false;//表示是否被双击
        private int doubleSpan;//用于判断双击的间隔时间
    
        /**
         * 双击事件线程执行体的构造函数
         * @param handler
         *          用于处理是否双击事件的handler
         */
        public DoubleRunnable(DoubleHandler handler) {
            handler.setDoubleRunnable(this);
            this.mHandler = handler;
        }
    
        @Override
        public void run() {
    
            while (true){
                //如果没有被点击,则继续下次循环
                if (!isPrepared) {
                    continue;
                }
                isPrepared = false;
                //如果线程处于一次双击事件的阻塞中,则继续下次循环,直至事件结束
                if (isStarted){
                    continue;
                }
                isStarted = true;
                try {
                    Thread.sleep(doubleSpan);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                Message msg = mHandler.obtainMessage();
                msg.obj = isDoubleClicked;
                mHandler.sendMessage(msg);
            }
    
        }
    
        /**
         * 设置当前双击事件的执行状态
         * @param isPrepared
         *          是否已被点击(可以执行线程中代码)
         * @param isDoubleClicked
         *          是否已被双击
         */
        public void setPreparedState(boolean isPrepared, boolean isDoubleClicked) {
            this.isPrepared = isPrepared;
            this.isDoubleClicked = isDoubleClicked;
        }
    
        /**
         * 设置线程是否处于一次双击事件判断的阻塞之中
         * @param isStarted
         *          传入是否阻塞开启
         */
        public void setIsStarted(boolean isStarted){
            this.isStarted = isStarted;
        }
    
        /**
         * 设置用于判断双击的间隔时间
         * @param doubleSpan
         *          传入的时间间隔
         */
        public void setDoubleSpan(int doubleSpan){
            this.doubleSpan = doubleSpan;
        }
    }

    4.最后创建一个双击事件管理器,进行线程的创建管理,并用于启动线程和更新用户的点击时间,之所以在管理器中更新时间并进行判断,是因为可以随时根据用户的点击去更新DoubleRunnable中的双击判断结果,如果在DoubleRunnable中进行时间判断,则会因为判断只会在下一次阻塞循环结束之后才能进行,导致一直是单击事件执行。

    /**
     * Created by 明月春秋 on 2017/11/18.
     * 双击事件的管理器
     * 方法:
     *      1.start:开启双击事件的线程执行
     */
    
    public class DoubleManager {
    
        private DoubleRunnable mDoubleRunnable = null;//负责双击事件的线程执行体
        private Thread mThread = null;//负责双击事件的线程
        private long mClickTime = 0;//记录点击时间
    
        private static final int DOUBLE_SPAN = 300;//用于判断双击的间隔时间
    
        /**
         * 双击事件管理器的构造函数
         * @param doubleRunnable
         *          传入负责双击事件的线程执行体
         */
        public DoubleManager(DoubleRunnable doubleRunnable){
            if (doubleRunnable == null){
                return;
            }
            if (mDoubleRunnable == null){
                doubleRunnable.setDoubleSpan(DOUBLE_SPAN);
                this.mDoubleRunnable = doubleRunnable;
            }
        }
    
        /**
         * 开启双击事件的线程执行
         */
        public void start(){
            if (mDoubleRunnable == null){
                return;
            }
            boolean isDoubleClicked = false;
            if ((System.currentTimeMillis() - mClickTime) < DOUBLE_SPAN) {
                isDoubleClicked = true;
            }
            else {
                isDoubleClicked = false;
                mClickTime = System.currentTimeMillis();
            }
            mDoubleRunnable.setPreparedState(true, isDoubleClicked);
            if (mThread == null){
                mThread = new Thread(mDoubleRunnable);
                mThread.start();
            }
        }
    }

    5.接下来就可以在任意控件的单击事件监听器中或按键事件中,进行双击事件的判断了。

    public class DoubleClick extends AppCompatActivity {
    
        private DoubleManager doubleManager = null;
        private DoubleManager keyDoubleManager = null;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.button_double_click);
    
        }
    
        public void doubleClick(View view){
            if (doubleManager == null){
                doubleManager = new DoubleManager(new DoubleRunnable(new DoubleHandler(new OnDoubleClickListener() {
                    @Override
                    public void onSinglePress() {
                        Toast.makeText(DoubleClick.this, "单击", Toast.LENGTH_SHORT).show();
                    }
    
                    @Override
                    public void onDoublePress() {
                        Toast.makeText(DoubleClick.this, "双击", Toast.LENGTH_SHORT).show();
                    }
                })));
            }
            doubleManager.start();
        }
    
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_ENTER){
                if (keyDoubleManager == null){
                    keyDoubleManager = new DoubleManager(new DoubleRunnable(new DoubleHandler(new OnDoubleClickListener() {
                        @Override
                        public void onSinglePress() {
                            Toast.makeText(DoubleClick.this, "按键单击", Toast.LENGTH_SHORT).show();
                        }
    
                        @Override
                        public void onDoublePress() {
                            Toast.makeText(DoubleClick.this, "按键双击", Toast.LENGTH_SHORT).show();
                        }
                    })));
                }
                keyDoubleManager.start();
            }
            return super.onKeyDown(keyCode, event);
        }
    }

    运行例子中按键事件时,记得将Button在布局中设为android:visibility=”gone”,防止按键事件直接点击到按钮上,执行按钮的双击事件监听了。

    三、运行效果图

    1.执行按钮单击
    这里写图片描述

    2.执行按钮双击
    这里写图片描述

    3.执行按键单击
    这里写图片描述

    4.执行按键双击
    这里写图片描述

    四、总结
    到此,Android任意控件或按键的双击事件监听就已经全部实现了。只要前面将准备工作做好,就可以随意在任何代码处添加双击事件管理器并执行了,不会对原有代码产生任何影响,如果对本文有什么意见和问题欢迎指正,如果觉得本文可以,请帮忙点个赞,谢谢观看。

    展开全文
  • 主要介绍了Android双击返回键退出程序的实现方法,是Android程序开发中非常具有实用价值的重要技巧,需要的朋友可以参考下
  • Android组件单双击共存,即可有单击事件,也可有双击事件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,981
精华内容 20,392
关键字:

双击android版本出现