背景:在利用scroller对view进行操作是调用view.scrollTo()失效。
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.v("SlindingDeleteView", String.valueOf(5));
// TODO Auto-generated method stub
if (event.getAction()==MotionEvent.ACTION_UP || event.getAction()==MotionEvent.ACTION_CANCEL) {
if (Math.abs(getScrollX())>=width/8) {
postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
scrollTo(width/4, 0);
}
},200);
}else{
postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
scrollTo(0, 0);
}
},200);
}
}
return gesturedetector.onTouchEvent(event);
}
一开始认为是up事件被拦截了,然而debug之后发现并没有拦截,查阅相关资料发现了罪魁祸首:
mScroller.startScroll(mScroller.getFinalX(), mScroller.getFinalY(), (int) distanceX, 0,200);
在这里有一个延时200ms的操作,我暂时理解为在view没有完成这200ms的动作之前,scrollTo()方法是无效的,于是有了上面的postDelayed。