2

我有两个活动A和B.我想在A中捕获一个触摸事件MotionEvent.ACTION_DOWN,同时仍然按住,启动B,然后让发布事件MotionEvent.ACTION_UP被捕获在B.Android:捕获横跨活动的MotionEvent

在甲存在具有与下列回调的OnTouchListener一个视图v:用同一种OnTouchListener的

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getAction() & MotionEvent.ACTION_MASK) { 
    case MotionEvent.ACTION_DOWN: 
     startActivity(new Intent(A.this, B.class)); 
     break; 
    case MotionEvent.ACTION_UP: 
     // not called 
     break; 
    } 
    // false doesn't work either 
    return true; 
} 

在B中存在重叠视图V2(超过原来体积)但B的“onTouch”没有被称为当活动开始,除非我移动我的手指r(重新生成触摸事件)。

只要把,我正在做一个应用程序,会导致一个新的活动出现时按住屏幕,并完成当我松开手指。

是否有可能将MotionEvent.ACTION_DOWNed状态从一个视图转移到另一个视图?或者,新活动B是否清除了当前“屏幕触摸监听器”上的所有内容,只有A可用,因为它是在那里启动的?

感谢您对这些MotionEvents如何派发到活动和/或任何解决方案/破解我的问题的任何解释。

+0

您是否找到解决方案? –

回答

1
@Override 
    public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getAction() & MotionEvent.ACTION_MASK) { 
    case MotionEvent.ACTION_DOWN: 
     startActivity(new Intent(A.this, B.class)); 
     break; 
    case MotionEvent.ACTION_UP: 

      // Obtain MotionEvent object 
      long downTime = SystemClock.uptimeMillis(); 
      long eventTime = SystemClock.uptimeMillis() + 100; 
      float x = 0.0f; 
      float y = 0.0f; 
      // 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_UP, 
      x, 
      y, 
      metaState 
      ); 

      // Dispatch touch event to activity (make B static or get the activity var some other way) 

      B.OnTouchEvent(motionEvent); 
     break; 
    } 
    // false doesn't work either 
    return true; 
} 

而在B活动覆盖的onTouchEvent(使B实现OnTouchListener)是这样的:

@Override 
public bool OnTouchEvent(MotionEvent e) 
{ 
    return someview.OnTouchEvent(e); 
} 

记住,someview必须是为了赶的onTouchEvent视图,导致activitys不真的知道如何处理它。

+0

问题在于释放手指时未调用MotionEvent.ACTION_UP部分的情况;如果这样做不会太难以派发活动到活动B(就像你在那里做的那样)。 –