Android如何设置View的点击次数的工具类
程序员文章站
2022-03-14 08:25:18
Android设置View的点击次数的工具类
这是一个设置规定时间内用户点击某个View任意次数的工具类。比如:可以设置用户在两秒内点击10次按钮,就触发某个事件。当然,双击、三...
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 + "次"); } }); } }
布局也是很简单的:
已经测试过都是可以成功监听到对应的点击事件的。