防止抖动

/**

  • 防抖动点击

  • @author jiangshicheng
    */
    public class AntiShakeUtils {

    private final static long INTERNAL_TIME = 1000;

    /**

    • Whether this click event is invalid.
    • @param target target view
    • @return true, invalid click event.
    • @see #isInvalidClick(View, long)
      */
      public static boolean isInvalidClick(@NonNull View target) {
      return isInvalidClick(target, INTERNAL_TIME);
      }

    /**

    • Whether this click event is invalid.
    • @param target target view
    • @param internalTime the internal time. The unit is millisecond.
    • @return true, invalid click event.
      */
      public static boolean isInvalidClick(@NonNull View target, @IntRange(from = 0) long internalTime) {
      long curTimeStamp = System.currentTimeMillis();
      long lastClickTimeStamp = 0;
      Object o = target.getTag(R.id.last_click_time);
      if (o == null){
      target.setTag(R.id.last_click_time, curTimeStamp);
      return false;
      }
      lastClickTimeStamp = (Long) o;
      boolean isInvalid = curTimeStamp - lastClickTimeStamp < internalTime;
      if (!isInvalid)
      target.setTag(R.id.last_click_time, curTimeStamp);
      return isInvalid;
      }
      }

资源目录values下新建资源文件:
ids.xml:

...

实现原理:给Button设置名为last_click_time的tag标签并存储上一次点击的时间戳,在一定的时间间隔内只取第一次点击事件。如此, Button会随着界面的销毁而被释放,因而它的名为last_click_time的tag标签存储所占用的内存也会被释放回收。

使用起来那就是更简单了
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (AntiShakeUtils.isInvalidClick(v))
return;
// TODO: 2018/7/1
}
});

你还可以自定义有效点击的时间间隔:
if (AntiShakeUtils.isInvalidClick(v, 800))
return;

用过之后,从此不罢手!

你可能感兴趣的:(Android)