资讯专栏INFORMATION COLUMN

Android中的多击事件

Null / 2829人阅读

摘要:如果想实现双机或者多击事件的话就需要借鉴下原生应用的源码了。在中,三次点击的版本图标会出现一个相应版本的。简单的提取一下,可以得到击事件的源码双击事件原理分析将每次的点击事件依次存放到一个定长的容器中。就认为是多击事件。

在android系统中。google提供了一个click事件。只负责相应单次点击。
如果想实现双机或者多击事件的话就需要借鉴下google原生应用的源码了。
在android中,三次点击android的版本图标会出现一个相应版本的logo。

来看看google工程师是怎么写的。

 @Override
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
        if (preference.getKey().equals(KEY_FIRMWARE_VERSION)) {
            System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);
            mHits[mHits.length-1] = SystemClock.uptimeMillis();
            if (mHits[0] >= (SystemClock.uptimeMillis()-500)) {
                Intent intent = new Intent(Intent.ACTION_MAIN);
                intent.setClassName("android",
                        com.android.internal.app.PlatLogoActivity.class.getName());
                try {
                    startActivity(intent);
                } catch (Exception e) {
                    Log.e(LOG_TAG, "Unable to start activity " + intent.toString());
                }
            }
        } else if (preference.getKey().equals(KEY_BUILD_NUMBER)) {
            // Don"t enable developer options for secondary users.
            if (UserHandle.myUserId() != UserHandle.USER_OWNER) return true;

            if (mDevHitCountdown > 0) {
                if (mDevHitCountdown == 1) {
                    if (super.ensurePinRestrictedPreference(preference)) {
                        return true;
                    }
                }
                mDevHitCountdown--;
                if (mDevHitCountdown == 0) {
                    getActivity().getSharedPreferences(DevelopmentSettings.PREF_FILE,
                            Context.MODE_PRIVATE).edit().putBoolean(
                                    DevelopmentSettings.PREF_SHOW, true).apply();
                    if (mDevHitToast != null) {
                        mDevHitToast.cancel();
                    }
                    mDevHitToast = Toast.makeText(getActivity(), R.string.show_dev_on,
                            Toast.LENGTH_LONG);
                    mDevHitToast.show();
                } else if (mDevHitCountdown > 0
                        && mDevHitCountdown < (TAPS_TO_BE_A_DEVELOPER-2)) {
                    if (mDevHitToast != null) {
                        mDevHitToast.cancel();
                    }
                    mDevHitToast = Toast.makeText(getActivity(), getResources().getQuantityString(
                            R.plurals.show_dev_countdown, mDevHitCountdown, mDevHitCountdown),
                            Toast.LENGTH_SHORT);
                    mDevHitToast.show();
                }
            } else if (mDevHitCountdown < 0) {
                if (mDevHitToast != null) {
                    mDevHitToast.cancel();
                }
                mDevHitToast = Toast.makeText(getActivity(), R.string.show_dev_already,
                        Toast.LENGTH_LONG);
                mDevHitToast.show();
            }
        }
        return super.onPreferenceTreeClick(preferenceScreen, preference);
    }

设置设置应用中实现三击的源码。简单的提取一下,可以得到n击事件的源码

private void doubleClick() {
        final long[] mHits = new long[2];
        view.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
                mHits[mHits.length - 1] = SystemClock.uptimeMillis();
                if (mHits[0] >= (SystemClock.uptimeMillis() - 500)) {
                    // 双击事件
                }
            }
        });
    }

原理分析:
将每次的点击事件依次存放到一个定长的容器中。再对比第一次跟最后一次之间的时间差,如果满足一定的条件的。就认为是多击事件。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12284.html

相关文章

  • [前端][自定义DOM事件]不使用setTimeout实现双击事件或n击事件

    摘要:使用实现双击事件例如,这样双击省略参数合法性的判断自定义双击事件可以使用携带数据双击事件监听双击事件触发是否已经点击过一次事件分发使用数组实现双击事件或击事件灵感来自于系统多击触发彩蛋的源码用前端的方式实现长这样双击省略参数合法性的判断创建 使用setTimeout实现双击事件 例如,这样: let div = document.getElementById(div); doubleC...

    Kerr1Gan 评论0 收藏0
  • [前端][自定义DOM事件]不使用setTimeout实现双击事件或n击事件

    摘要:使用实现双击事件例如,这样双击省略参数合法性的判断自定义双击事件可以使用携带数据双击事件监听双击事件触发是否已经点击过一次事件分发使用数组实现双击事件或击事件灵感来自于系统多击触发彩蛋的源码用前端的方式实现长这样双击省略参数合法性的判断创建 使用setTimeout实现双击事件 例如,这样: let div = document.getElementById(div); doubleC...

    Cobub 评论0 收藏0
  • 100%移植阿里云移动测试技术,竟仅需1周?!——移动测试专有云(3)——内容详解

    摘要:换句话说就是,让测试更有针对性。得益于强大的测试技术,兼容性测试的检出率远远高于业界水平。同时,在性能测试方面,即提供了项性能指标曲线性能分析,更提供了强大的内存泄漏和内存溢出的检测和分析能力。 摘要: Android兼容性测试旨在帮助解决Android应用在不同真机机型上的各类兼容性问题,包括 Crash/ANR分析、6项性能分析、UI检测、3个版本的覆盖安装检测等。Android兼...

    付永刚 评论0 收藏0
  • Android面试 - 收藏集 - 掘金

    摘要:写给小白的基础面试笔试题二掘金序言找工作绝逼是一件非常痛苦的事,尤其是年底找工作,当然了,这其中大部分原因肯定是因为只是个没有经验的,还没毕业的大学生。 Android 性能优化典范 - Android - 掘金摘要:新年伊始,Google发布了包含16个短视频的Android性能优化典范专题,详解Android系统中有关性能问题的底层工作原理,并介绍了如何通过工具找出性能问题以及提升...

    pakolagij 评论0 收藏0
  • 用typescript开发手势库 - (1)web开发常用手势有哪些?

    这只是个开头 说在最前面,本文是一个系列文章的开头, 这个系列里我会讲如何用typescript开发一款支持pc和手机端的手势库any-touch, 以及通过jest让你的代码测试覆盖率100%. showImg(https://segmentfault.com/img/bVbp3B0?w=936&h=246); 目录 用TypeScript开发手势库 - (2)tsconfig.json & r...

    raise_yang 评论0 收藏0

发表评论

0条评论

Null

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<