我对客户的要求如下:
创建一个执行以下操作的视图:
- 用户应该能够上下滑动以在各种钟面视图之间切换
- 用户应该能够左右滑动以在各种背景图像之间切换。
我的第一个想法是有一个扩展FrameLayout的类,添加一个VerticalViewPager,在它上面添加另一个ViewPager,用它们的内容设置适当的适配器,然后覆盖FrameLayout的onTouchEvent
和onInterceptTouchEvent
方法如下
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getActionMasked()) {
case MotionEvent.ACTION_DOWN: {
// store the X value when the user's finger was pressed down
downXValue = ev.getX();
downYValue = ev.getY();
break;
}
}
return true;
}
float downXValue, downYValue;
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.e(TAG, event.toString());
float currentX = event.getX();
float currentY = event.getY();
if (Math.abs(downXValue - currentX) > Math.abs(downYValue
- currentY)) {
mHorizPager.dispatchTouchEvent(event);
} else {
mVerticalPager.dispatchTouchEvent(event);
}
return true;
}
虽然这在技术上正常工作,因为它正确地将MotionEvent调度到适当的ViewPager,滑动水平视图非常麻烦,并且很少实际更改当前的ViewPager项。
我怀疑我的onInterceptTouchEvent
和onTouchEvent
的实现对于它需要做的事情来说有点过于天真,但我老实说我最终试图调试它。