Android设置View的点击次数的工具类

这是一个设置规定时间内用户点击某个View任意次数的工具类。比如:可以设置用户在两秒内点击10次按钮,就触发某个事件。当然,双击、三击也是可以任意来设置的。

这个工具类是我自己感觉有点意思,就研究出来的,网上也有很多其他的做法,但是我认为都是不太好的,甚至那个什么谷歌程序员的方法,我也是认为一般般的做法。

并且我这个工具类设置了回调,使用起来也是很方便的。

package com.example.lwx537240.myapplication3;import android.os.SystemClock;import android.util.Log;import android.view.View;import java.util.Arrays;/** * 设置任意View点击任意次数并设置规定时间内完成的工具类 * 这个工具类比较适合我们开发人员设置一些隐藏开关,进行特定操作 * 比如:彻底关闭程序、弹出该页面某些信息等等 */public class ClickTimesUtil {    /***     *     * @param view        要设置点击效果的View     * @param times       点击的次数     * @param timeBetween 点击完成规定次数的时间范围     */    public static void setClickTimes(View view, final int times, final long timeBetween, final IClick click) {        final long[] mHits = new long[times];//存储多次点击的时间戳        view.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                System.arraycopy(mHits, 1, mHits, 0, times - 1);//自己拷贝自己,只不过错位拷贝【第二个元素拷贝到第一个元素,第一个元素拷贝到第零个元素】                mHits[times - 1] = SystemClock.uptimeMillis();//给数组的最后一个元素赋值                if (mHits[times - 1] - mHits[0] <= timeBetween) {//当第mHits[lengt-1]点击的时间戳减去mHits[0]的时间戳小于指定时间则该多击事件生效                    Log.e("TAG", timeBetween + "毫秒内点击" + times + "次");                    Arrays.fill(mHits, 0);   //数据全部置零                    if (click != null) {                        click.onClickListen();    //设置事件的回调                    }                }            }        });    }    interface IClick {        void onClickListen();    }}

下面是一个调用示例

不管是View、Button、Textview都是可以设置点击事件的。

package com.example.lwx537240.myapplication3;import android.os.SystemClock;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.webkit.WebResourceRequest;import android.webkit.WebSettings;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Button;import android.widget.ImageView;import android.widget.Toast;import java.util.Arrays;public class MainActivity extends AppCompatActivity {    Button btn_back;    ImageView imageView;    View view;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //实例化控件        initView();        initEvent();    }    private void initView() {        btn_back = findViewById(R.id.btn_back);        imageView = findViewById(R.id.imageView);        view = findViewById(R.id.view);    }    private void initEvent() {        ClickTimesUtil.setClickTimes(btn_back, 5, 1000, new ClickTimesUtil.IClick() {            @Override            public void onClickListen() {                Log.e("TAG MainActivity", 1000 + "毫秒内点击回退按钮" + 5 + "次");            }        });        ClickTimesUtil.setClickTimes(imageView, 5, 1000, new ClickTimesUtil.IClick() {            @Override            public void onClickListen() {                Log.e("TAG MainActivity", 1000 + "毫秒内点击图片" + 5 + "次");            }        });        ClickTimesUtil.setClickTimes(view, 5, 1000, new ClickTimesUtil.IClick() {            @Override            public void onClickListen() {                Log.e("TAG MainActivity", 1000 + "毫秒内点击View" + 5 + "次");            }        });    }}

布局也是很简单的:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent">    <View        android:id="@+id/view"        android:layout_width="match_parent"        android:layout_height="40sp"        android:background="#00f" />    <ImageView        android:id="@+id/imageView"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_marginTop="50sp"        android:src="@mipmap/ic_launcher" />    <Button        android:id="@+id/btn_back"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:text="back" />RelativeLayout>

已经测试过都是可以成功监听到对应的点击事件的。

上面有个System.arraycopy的方法可能有些人不是很熟悉。我之前也是有总结过的,可以参考:
http://blog.csdn.net/wenzhi20102321/article/details/78444158

共勉:你的格局决定你的结局。

更多相关文章

  1. Android的多媒体技术――MediaPlayer实现音频与视频的播放
  2. 我的工具太少了之Android无限轮播图片,最后一张过度动画很重要
  3. Android滑动冲突之完美实现RecycleView+下拉刷新+上拉加载+粘性H
  4. 【android】使用android-resource-remover删除项目中无用的资源,
  5. Android学习07-----事件处理(1)单击事件_改变屏幕方向和密码明文
  6. Android(安卓)【真机】与【模拟器】触摸屏事件的模拟差异分析
  7. android鼠标滚轮bug
  8. Android(安卓)自定义View——自定义点击事件
  9. android点滴2

随机推荐

  1. Android——RecyclerView——Recycler类
  2. android MQTT的使用及demo
  3. Thread、Handler和HandlerThread关系何在
  4. android gallery 自定义边框+幻灯片
  5. Android之手机号码格式的正则表达式
  6. Android(安卓)悬浮窗的实现源码
  7. ConstraintLayout学习笔记
  8. fragment UI
  9. AudioFlinger 如何通过 hwBinder 调用 Au
  10. sqlite 基本操作