Android 按钮点击的缩放动画以及防止重复点击
OnClickListener工具
/**
* 按钮的点击缩放动画
* 防止重复点击(1s内只执行动画 不触发回调)
* */
public class OnClickListener implements View.OnTouchListener {
private View mView;
private ClickInterfaces clickInterfaces;
private long mLastClickTime;
private long timeInterval = 1000L;//防止重复点击的间隔时间
private boolean isPrevent = false;//是否防止重复点击
//按钮需要添加重复点击的方法
public void setViewTouch(View mView,ClickInterfaces clickInterfaces){
this.mView = mView;
this.clickInterfaces = clickInterfaces;
mView.setOnTouchListener(this);
}
//isPrevent = true 时 不能触发重复点击
public void setViewTouch(View mView,boolean isPrevent,ClickInterfaces clickInterfaces){
this.mView = mView;
this.clickInterfaces = clickInterfaces;
this.isPrevent = isPrevent;
mView.setOnTouchListener(this);
}
@Override
public boolean onTouch(View v, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN://xy缩放的范围 1是正常 Duration持续的时间
mView.animate().scaleX(0.8f).scaleY(0.8f).setDuration(100).start();
break;
case MotionEvent.ACTION_UP:
mView.animate().scaleX(1).scaleY(1).setDuration(100).start();
long nowTime = System.currentTimeMillis();
if (nowTime - mLastClickTime > timeInterval || isPrevent) {
// 单次点击事件
clickInterfaces.onStepSuccess();
mLastClickTime = nowTime;
}
break;
}
return true;
}
}
触发点击效果调用的接口
public interface ClickInterfaces {
void onStepSuccess();//触发点击效果
}
调用方法
//带重复点击的
new OnClickListener().setViewTouch(view, new ClickInterfaces() {
@Override
public void onStepSuccess() {
//点击后的逻辑
}
});
//不带重复点击的
new OnClickListener().setViewTouch(view,true,new ClickInterfaces() {
@Override
public void onStepSuccess() {
}
});