Android MotionEvent:在视图之间传输
我有两个自定义视图组,用于实现motionevent的onTouchListener。Android MotionEvent:在视图之间传输
我正在使用framelayout来显示它们两者。 第二个视图组的大小比第一个小。 所以第一个是在后台,第二个是前台。
我想将第二/较小视图组的项目拖动到背景视图组。
问题:当拖动的项目的背景的ViewGroup (i.e mAwesomePager)
,我想ACTION_UP
要在第二的ViewGroup触发(较小的一个),并ACTION_MOVE
要在第一ViewGroup中触发,所以基本上touchEvent
从较小的ViewGroup转移到在背景和MotionEvent
继续较大的一个没有用户必须从屏幕上拿起手指,然后再放回来。
下面是一些有用的代码:
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (mRectOut == true) {
ev.setAction(MotionEvent.ACTION_UP);
mFrame.bringChildToFront(mAwesomePager);
//mAwesomePager.setClickable(true);
// Obtain MotionEvent object
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis() + 100;
// List of meta states found here: developer.android.com/reference/android/view/KeyEvent.html#getMetaState()
int metaState = 0;
MotionEvent motionEvent = MotionEvent.obtain(
downTime,
eventTime,
MotionEvent.ACTION_DOWN,
ev.getX(),
ev.getY(),
metaState
);
mAwesomePager.getChildAt(mAwesomePager.mLastDragged).dispatchTouchEvent(motionEvent);
}
//some more code here
}
我想通过这个ev.setAction(MotionEvent.ACTION_UP);
模拟触摸关在前景看,现在我想的背景视图接管控制触摸而触摸是拿着拖动的图像。
更改此 mAwesomePager.getChildAt(mAwesomePager.mLastDragged).dispatchTouchEvent(motionEvent);
这个
return mAwesomePager.dispatchTouchEvent(motionEvent);
最终没有获得成功。
考虑看看onTouchEvent()
方法的文档,更具体的返回参数:
返回
真如果事件被处理,假否则。
如果你希望你的事件将被传递到你的背景来看,你需要确保当一个ACTION_UP
发生时,该方法返回false因此Android知道运动事件尚未消耗,应中继到层次结构中的下一个视图。
这里是做什么一个基本的片断:
public boolean onTouchEvent(MotionEvent ev) {
if (event.getAction() == MotionEvent.ACTION_UP) {
// handle ACTION_UP with the foreground view
return false; // event will be sent to the background view
} else {
// handle ACTION_MOVE with the foreground view
return true; // event will stop here
}
}
请记住,你的背景图也需要实现其反过来要做到这一点触摸监听器。
感谢您的回复。我想通过'ev.setAction(MotionEvent.ACTION_UP)'来模拟前景视图中的触摸;',现在我希望背景视图在触摸持有拖动的图像时控制触摸。 'return false'终止两个视图的触摸事件。 –
假设您保持返回true,您创建的motionEvent是否被分派到背景视图? –