znq*_*znq 21 events android touch
我有以下层次结构:Activity- > PopupWindow- >CustomView
我PopupWindow自己是一个方形,但透明,所以你可以看到活动坐在后台.这CustomView是一个嵌入PopupWindow内部的圆圈.

到目前为止我取得的成就是
PopupWindow触摸事件将被分派到活动.现在缺少的部分是将PopupWindow在CustomView(圆圈)内部发生的任何触摸事件发送到活动.
我已经知道如何感觉触摸是在我的圈子之外.我只是将它委托给Activity时遇到了问题.
在我,CustomView我有以下内容onTouch
if (radiusTouch > maxRadius) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
在我的PopupWindow我已经设置了以下,但它永远不会被调用:
popup.setTouchInterceptor(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.i(TAG, "PopupWindow :: onTouch()");
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
还有什么我需要做的事情来将触摸事件一直委托给Activity?
ale*_*2k8 12
考虑FLAG_NOT_TOUCH_MODAL:
/** Window flag: Even when this window is focusable (its
* {@link #FLAG_NOT_FOCUSABLE is not set), allow any pointer events
* outside of the window to be sent to the windows behind it. Otherwise
* it will consume all pointer events itself, regardless of whether they
* are inside of the window. */
public static final int FLAG_NOT_TOUCH_MODAL = 0x00000020;
Run Code Online (Sandbox Code Playgroud)
在弹出窗口显示后,您可以使用此代码更新窗口标志.
FrameLayout popupContainer = (FrameLayout)contentView.getParent();
WindowManager.LayoutParams p = (WindowManager.LayoutParams)popupContainer.getLayoutParams();
p.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
WindowManager windowManager = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
windowManager.updateViewLayout(popupContainer, p);
Run Code Online (Sandbox Code Playgroud)
遗憾的是 PopupWindow 不是 ViewGroup 甚至 View 的子类。然后你可以重写dispatchTouchEvent。您可以修改您的自定义视图以了解 PopupWindow 并在点击圆外时对其调用 Dismiss() 吗?
| 归档时间: |
|
| 查看次数: |
13579 次 |
| 最近记录: |