首先要得到触摸事件,这个触摸事件有坑,在activity中是得不到的,必须从view中得到。通过重写view的onInterceptTouchEvent方法拦截到这个触摸事件,再通过一个boolean变量记录触摸的状态,代码如下。
public class MyLinearLayout extends LinearLayout {
public boolean isPressed = false;
public CustomLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomLinearLayout(Context context) {
super(context);
}
/**
* 拦截控件的触摸事件分发方法,对触摸事件进行判断
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
// 触摸按下
case MotionEvent.ACTION_DOWN:
isPressed = true;
break;
// 触摸抬起
case MotionEvent.ACTION_UP:
isPressed = false;
break;
}
return super.onInterceptTouchEvent(ev);
}
}
然后就是在activity中对控件设置点击的监听回调,代码如下。
// 设置监听回调
btnSubtractLight.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
new Thread(){
@Override
public void run() {
while(linearLayout.isPressed){
// 此处放需要执行的代码
SystemClock.sleep(100);
}
}
}.start();
return true;
}
});