Android效率组件篇 设置长按响应时间(时长)
Posted 其子昱舟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android效率组件篇 设置长按响应时间(时长)相关的知识,希望对你有一定的参考价值。
一、长按响应代码Utils
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;
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 OnLongClickListener longClickListener)
longClickView.setOnTouchListener(new OnTouchListener()
private int TOUCH_MAX = 50;
private int mLastMotionX;
private int mLastMotionY;
@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等其他事件不能用请改这里
private Runnable r = new Runnable()
@Override
public void run()
if (longClickListener != null) // 回调给用户,用户可能传null,需要判断null
longClickListener.onLongClick(longClickView);
;
);
二、如何使用
说明:1、XXXView:你需要长按的控件 2、2000:代表长按的秒数,1000为一秒
LongClickUtils.setLongClick(new Handler(), XXXView, 2000, new View.OnLongClickListener()
@Override
public boolean onLongClick(View v)
//todo:补充长按事件的处理逻辑
return true;
);
以上是关于Android效率组件篇 设置长按响应时间(时长)的主要内容,如果未能解决你的问题,请参考以下文章