android 手指跟随拖拽 ACTION_MOVE 不能识别的问题

前两天打一个android应用上的带有手指拖拽动画的View模块,在activity中设置了这个view的onTouchListener,结果能够收到ACTION_DOWN消息但是却收不到ACTION_MOVE消息,网上查资源讲到有关interceptTouchEvent和onTouchEvent的处理顺序问题,觉得这篇写得最好http://blog.csdn.net/lvxiangan/article/details/9309927

但是非常疼的是interceptTouchEvent大多数控件不可重写,自View控件继承的控件就是其中一类,但是了解了这个touch事件处理流程后,发现关键问题可以不用重写函数来解决,android人家封装好了就给你一个返回值让控制超级有道理啊。于是尝试了一下在ACTION_DOWN处理后return true,ACTION_MOVE就可以接收消息了,顿时觉得因为这样的细节问题把这一套机制走了一遍有种意外收获的感觉,下面给一个onTouch处理函数里面的例子:

public class MainActivity extends Activity implements OnClickListener{

...

private CustomView cv = null;
 @Override
 protected void onCreate(Bundle savedInstanceState) {

...
  cv.setOnTouchListener(this);

...

}

...

private float lastx = 0.0f;

@Override
 public boolean onTouch(View v, MotionEvent event) {
  // TODO Auto-generated method stub
  switch(event.getAction()){
  case MotionEvent.ACTION_DOWN:
   lastx = event.getX();
   return true;       //这里如果设置false,那么之后的MOVE不会被处理
  case MotionEvent.ACTION_MOVE:
   cv.setMove(event.getX()-lastx);

   lastx = event.getX();
   break;    
  case MotionEvent.ACTION_UP:
   ...
  default:break;
  }
  return false;
 }

...

}

你可能感兴趣的:(代码分析,android)