android快速点击分析
要点思路:
1 一般我们会这样考虑,当两次按按钮的时间小于1s为快速点击,那么需要记住两次点击的时间间隔
2 为了方便记住点击按钮的时间,我们需要记住每次按钮点击的时间 。
核心
正确写法
long currentTime = System.currentTimeMillis();
lastClickTime2 = currentTime;
错误写法
lastClickTime2 =System.currentTimeMillis();
错误写法的原因是: 最后点击的时间不是按钮刚开始按下去的时间,而是代码执行完之后的时间,保存的时间不准确。
代码分析
测试快速点击button分析了快速点击的形成过程,当两次点击时间间隔小于1会出现快速点击
不允许快速点击button:通过对if条件不允许出现快速点击
不允许快速点击测试button : 对快速点击做了一个封装
package com.example.zz.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.text.DecimalFormat;
public class MainActivity extends AppCompatActivity {
private TextView tvResult;
private TextView tvResult2;
private TextView tvResult3;
private TextView tvClickNum;
private Button btnFastClick;
private Button fastClickUtils;
private long lastClickTime;
private int clickNums;
private long lastClickTime2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnFastClick = findViewById(R.id.btnFastClick);
fastClickUtils = findViewById(R.id.fastClickUtils);
tvResult = findViewById(R.id.tvResult);
tvResult2 = findViewById(R.id.tvResult2);
tvResult3 = findViewById(R.id.tvResult3);
tvClickNum = findViewById(R.id.tvClickNum);
btnFastClick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
long currentTime = System.currentTimeMillis();
if(System.currentTimeMillis() - lastClickTime<1000){
clickNums ++;
float time =(float) (System.currentTimeMillis() - lastClickTime)/1000;
DecimalFormat df = new DecimalFormat("0.00");//格式化小数
String s = df.format(time);
tvResult.setText("快速点击了,时间间隔:"+s);
tvClickNum.setText("快速点击次数:"+clickNums);
}else {
tvResult.setText("非快速点击");
tvClickNum.setText("");
clickNums =0;
}
lastClickTime = currentTime;
}
});
fastClickUtils.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(FastClickUtils.isAllowClick()){
tvResult3.setText("允许被点击");
}else {
tvResult3.setText("快速点击,不被允许被点击");
}
}
});
}
public void btnNoFastClickTest(View view){
long currentTime = System.currentTimeMillis();
if(System.currentTimeMillis()-lastClickTime2>1000){
//正常速度点击
tvResult2.setText("正常速度点击");
}else {
//快速点击
tvResult2.setText("快速点击");
}
lastClickTime2 = currentTime;
}
}
对快速点击封装
package com.example.zz.myapplication;
import android.view.View;
public class FastClickUtils {
private static long lastClickTime2;
private static int spaceTime = 1000;//时间间隔
public static Boolean isFastClick(){
long currentTime = System.currentTimeMillis();
boolean isFastClick;//是否允许点击
if(currentTime-lastClickTime2>spaceTime){
isFastClick= false;
//正常速度点击
}else {
isFastClick= true;
//快速点击
}
lastClickTime2 = currentTime;
return isFastClick;
}
public static Boolean isAllowClick(){
long currentTime = System.currentTimeMillis();
boolean allowClick;//是否允许点击
if(currentTime-lastClickTime2>spaceTime){
allowClick= true;
//正常速度点击
}else {
allowClick= false;
//快速点击
}
lastClickTime2 = currentTime;
return allowClick;
}
}
demo下载
https://download.youkuaiyun.com/download/qq_26296197/10838697