* @author tmac 如果不做处理MyLinearLayout中的子view能自行处理touch事件。
* 现在我希望当我在屏幕中间上方拖动时,整个屏幕的子view一起向上拖动,
* 这是就需要在满足条件时,中断该touch事件,交给MyLinearLayout这个父view来处理。
* 先中断所有子view的touch事件,然后根据触摸的位置,有父view把点击事件分发给相应的子view。
* 在分发之前需要给touch事件的对象event重新设置位置,因为子view的坐标系与父view是不同的。
*/
public class MyLinearLayout extends LinearLayout {
public MyLinearLayout(Context context) {
super(context);
}
public MyLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return true;
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int count = getChildCount();
int width = getWidth() / count;
int height = getHeight();
int currX = (int) event.getX();
int currY = (int) event.getY();
if (currX < width) {
event.setLocation(width / 2, currY);
getChildAt(0).dispatchTouchEvent(event);
return true;
} else if (currX < 2 * width) {
if (currY > height / 2) {
event.setLocation(width / 2, currY);
getChildAt(1).dispatchTouchEvent(event);
return true;
} else {
event.setLocation(width, currY);
for(int i=0;i<count;i++){
getChildAt(i).dispatchTouchEvent(event);
}
return true;
}
} else if (currX < 3 * width) {
event.setLocation(width / 2, currY);
getChildAt(2).dispatchTouchEvent(event);
return true;
}
return true;
}
}