我有一个自定义View
,我正在覆盖onTouchEvent(MotionEvent)
。我已按照文章Making Sense of Multitouch中的说明在此视图中实现了缩放缩放。我遇到的问题是这个视图最终用在需要触摸事件滚动的Gallery
中。我添加了逻辑来检测我的视图何时完全向右/向左滚动并返回false,但我认为Gallery
需要完整的MotionEvent
动作才能滚动。这是我返回false的地方:
case MotionEvent.ACTION_MOVE: {
final int pointerIndex = event.findPointerIndex( getActivePointerId() );
final float x = event.getX( pointerIndex );
final float y = event.getY( pointerIndex );
// Only move if the ScaleGestureDetector isn't processing a gesture.
if ( !getScaleDetector().isInProgress() ) {
if ( isDetectMovementX() ) {
final float dx = x - getLastTouchX();
setPosX( getPosX() + dx );
}
if ( isDetectMovementY() ) {
final float dy = y - getLastTouchY();
setPosY( getPosY() + dy );
}
invalidate();
}
setLastTouchX( x );
setLastTouchY( y );
if ( isAtXBound() ) {
return false;
}
break;
}
View
缩放和翻译,但Gallery
从不滚动。我想知道是否有办法基本上将MotionEvent
重新发送为“新鲜”MotionEvent
,初始操作为ACTION_DOWN
。谢谢!
答案 0 :(得分:1)
您可以使用MotionEvent
的构造函数创建一个新构造函数。请参阅文章Android: How to create a MotionEvent?
此外,obtain(...)
方法会创建新的MotionEvent
。试试MotionEvent e = MotionEvent.obtain(event);
有关obtain
的更多信息,请参阅this link。