Android设置View的点击次数的工具类
16lz
2021-01-24
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
共勉:你的格局决定你的结局。
更多相关文章
- Android的多媒体技术――MediaPlayer实现音频与视频的播放
- 我的工具太少了之Android无限轮播图片,最后一张过度动画很重要
- Android滑动冲突之完美实现RecycleView+下拉刷新+上拉加载+粘性H
- 【android】使用android-resource-remover删除项目中无用的资源,
- Android学习07-----事件处理(1)单击事件_改变屏幕方向和密码明文
- Android(安卓)【真机】与【模拟器】触摸屏事件的模拟差异分析
- android鼠标滚轮bug
- Android(安卓)自定义View——自定义点击事件
- android点滴2