安卓 长按自定义时长响应

释放双眼,带上耳机,听听看~!
package tools;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by liutao on 2019/3/15.
*/
public class LongClickUtils {
private static final String TAG = "LongClickUtils";
/**
* @param handler           外界handler(为了减少handler的泛滥使用,最好全局传handler引用,如果没有就直接传 new Handler())
* @param longClickView     被长按的视图(任意控件)
* @param delayMillis       长按时间,毫秒
* @param longClickListener 长按回调的返回事件
*/
public static void setLongClick(final Handler handler, final View longClickView, final long delayMillis, final View.OnLongClickListener longClickListener) {
longClickView.setOnTouchListener(new View.OnTouchListener() {
private int TOUCH_MAX = 50;
private int mLastMotionX;
private int mLastMotionY;
private Runnable r = new Runnable() {
@Override
public void run() {
if (longClickListener != null) {// 回调给用户,用户可能传null,需要判断null
longClickListener.onLongClick(longClickView);
}
}
};
@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
// 抬起时,移除已有Runnable回调,抬起就算长按了(不需要考虑用户是否长按了超过预设的时间)
handler.removeCallbacks(r);
break;
case MotionEvent.ACTION_MOVE:
if (Math.abs(mLastMotionX - x) > TOUCH_MAX
|| Math.abs(mLastMotionY - y) > TOUCH_MAX) {
// 移动误差阈值
// xy方向判断
// 移动超过阈值,则表示移动了,就不是长按(看需求),移除 已有的Runnable回调
handler.removeCallbacks(r);
}
break;
case MotionEvent.ACTION_DOWN:
// 每次按下重新计时
// 按下前,先移除 已有的Runnable回调,防止用户多次单击导致多次回调长按事件的bug
handler.removeCallbacks(r);
mLastMotionX = x;
mLastMotionY = y;
// 按下时,开始计时
handler.postDelayed(r, delayMillis);
break;
}
return true;//onclick等其他事件不能用请改这里
}
});
}
}

使用:

//长按5秒响应
LongClickUtils.setLongClick(new Handler(), FL_long, 3000, new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//				showNormalDialog();
Toast.makeText(MainActivity.this,"你好",Toast.LENGTH_SHORT).show();
return true;
}
});
FL_long:你要长按的控件

3000:长按的秒数,1000一秒

人已赞赏
Android文章

Android字体高度-适配问题

2020-4-11 21:11:56

Android文章

安卓ViewPager无限循环 自动轮播 完美切换(动态图)

2020-4-11 22:03:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索