首页 > 解决方案 > 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,事件调度系统似乎会使用旧边界进行进一步的触摸调度。

有什么想法吗?

标签: androidandroid-layout

解决方案


推荐阅读