Android自定义按钮长按持续事件

Home / Android MrLee 2014-12-5 5296

有时候需要这种需求,按住按钮不放,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://www.it72.com/374.htm

推荐阅读
最新回复 (0)
返回