android - Android - 重新定位视图后正确发送触摸事件
问题描述
我想在我的项目中使用virtual-joystick-android,但我遇到了一个我目前无法解决的问题。
每次用户触摸屏幕时,我都需要更改操纵杆的位置,换句话说,必须在触摸调度流程期间重新定位操纵杆。问题是重新定位后我必须第二次触摸屏幕才能操纵操纵杆。我使用的布局看起来像:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/joystickLayout">
<io.github.controlwear.virtual.joystick.android.JoystickView
android:id="@+id/joystick"
android:layout_width="150dp"
android:layout_height="150dp"
android:visibility="gone"
custom:JV_buttonSizeRatio="25%"
custom:JV_fixedCenter="false" />
</RelativeLayout>
如果我尝试像这样更改它在 RelativeLayout 中的位置:
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(joystick.getLayoutParams());
params.setMargins((int) motionEvent.getX() - joystick.getWidth() / 2, (int) motionEvent.getY() - joystick.getHeight() / 2, 0, 0);
joystick.setLayoutParams(params);
在RelativeLayout 的onTouch 内部,事件在被分派给父级之前被分派给子级,并且手动分派它们似乎不会为子级提供未来的事件(移动、向上)。如果我尝试在重写的 dispatchTouchEvent 中重新定位 JoystickView,事件调度系统似乎会使用旧边界进行进一步的触摸调度。
有什么想法吗?
解决方案
推荐阅读
- postgresql - Postgres:将 ON CONFLICT 与 CASE 一起使用
- ios - 如何调整 UITextView 的大小,当达到某个值时,它会根据内容和固定宽度自动调整其宽度和高度?
- php - 带回显输出的 Var_dump
- c# - 循环遍历对象初始化器
- r - 箱线图中的日期格式(ggplot2)
- php - Using Foreach to print the values
- ios - 具有离线渲染的 FFT (installTap)
- html - 对齐按钮内的内容
- c++ - C++ constexpr 重载,编译时和运行时的不同代码
- azure - CPU 和内存消耗 ASP.NET Core WebAPI:Azure Webapp S2