有时候需要这种需求,按住按钮不放,0.1秒发送一次数据包,那么下面这个自定义按钮是最好的实例!
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Button;
import com.fenjin.app.item.RobotButtonItem;
public class MButton extends Button {
private boolean clickdown = false;
private LongTouchListener mListener;
private int mtime;
public MButton(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
clickdown = true;
if (mListener != null)
new LongTouchThread().start();
} else if (event.getAction() == MotionEvent.ACTION_UP
|| event.getAction() == MotionEvent.ACTION_CANCEL) {
clickdown = false;
}
return true;
}
/**
* 处理长按的任务
*/
class LongTouchThread extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
try {
while (clickdown) {
sleep(mtime);
mListener.onLongTouch(MButton.this.getId(),
(RobotButtonItem) getTag());
}
mListener.onUpTouch();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void setOnLongTouchListener(LongTouchListener listener, int time) {
mListener = listener;
mtime = time;
}
public LongTouchListener getLongTouchListener() {
return mListener;
}
/**
* 长按监听接口,使用按钮长按的地方应该注册此监听器来获取回调。
*/
public interface LongTouchListener {
void onLongTouch(int id, RobotButtonItem item);
void onUpTouch();
}
}
本文链接:https://it72.com/374.htm