(Android java)视图View中OnTouch()回调数据到其他界面

首先,我们需要在BottomRockerFragment中添加一个接口来回调摇杆的位置和角度信息。请将以下代码添加到BottomRockerFragment中:

public interface OnDataChangedListener {
    void onDataChanged(float leftAngle, float leftX, float leftY, float rightAngle, float rightX, float rightY);
}

然后,我们需要在BottomRockerFragment中声明一个OnDataChangedListener类型的变量,并在适当的地方触发回调。请将以下代码添加到BottomRockerFragment中:

private OnDataChangedListener onDataChangedListener;

public void setOnDataChangedListener(OnDataChangedListener listener) {
    onDataChangedListener = listener;
}

接下来,我们需要在触摸事件中触发回调。请将以下代码添加到BottomRockerFragment的onTouch方法中:

if (onDataChangedListener != null) {
    float leftAngle = calculateAngle(leftHandleView.getCenterX(), leftHandleView.getCenterY(), leftBaseView.getX() + leftBaseView.getWidth() / 2, leftBaseView.getY() + leftBaseView.getHeight() / 2);
    float leftX = (leftHandleView.getHandleX() - leftBaseView.getX()) / baseRadius;
    float leftY = (leftHandleView.getHandleY() - leftBaseView.getY()) / baseRadius;
    float rightAngle = calculateAngle(rightHandleView.getCenterX(), rightHandleView.getCenterY(), rightBaseView.getX() + rightBaseView.getWidth() / 2, rightBaseView.getY() + rightBaseView.getHeight() / 2);
    float rightX = (rightHandleView.getHandleX() - rightBaseView.getX()) / baseRadius;
    float rightY = (rightHandleView.getHandleY() - rightBaseView.getY()) / baseRadius;
    onDataChangedListener.onDataChanged(leftAngle, leftX, leftY, rightAngle, rightX, rightY);
}

 最后,我们需要在MainActivity中实现OnDataChangedListener接口,并在回调方法中更新DisplayView的显示。请将以下代码添加到MainActivity中:

public class MainActivity extends AppCompatActivity   {
    private DisplayView displayView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        BottomRockerFragment bottomRockerFragment = new BottomRockerFragment();
        bottomRockerFragment.setOnDataChangedListener(new OnDataChangedListener() {
            @Override
            public void onDataChanged(float leftAngle, float leftX, float leftY, float rightAngle, float rightX, float rightY) {
                //更新回调数据
                displayView.update(leftAngle, leftX, leftY, rightAngle, rightX, rightY);
            }
        });
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.rocker_view_container, bottomRockerFragment);
        fragmentTransaction.commit();

        //测试显示回调数据
        displayView = findViewById(R.id.display_view);



    }

在MainActivity的onCreate方法中,我们获取DisplayView的实例,并将MainActivity自身设置为BottomRockerFragment的OnDataChangedListener。然后,在onDataChanged方法中,我们调用DisplayView的update方法来更新显示。

接下来,我们需要创建一个DisplayView类来显示摇杆的位置和角度信息。请创建一个名为DisplayView的Java类,并将以下代码添加到DisplayView类中

public class DisplayView extends View {
    private float leftAngle;
    private float leftX;
    private float leftY;
    private float rightAngle;
    private float rightX;
    private float rightY;

    public DisplayView(Context context) {
        super(context);
    }

    public DisplayView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public DisplayView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void update(float leftAngle, float leftX, float leftY, float rightAngle, float rightX, float rightY) {
        this.leftAngle = leftAngle;
        this.leftX = leftX;
        this.leftY = leftY;
        this.rightAngle = rightAngle;
        this.rightX = rightX;
        this.rightY = rightY;
        invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // 绘制左摇杆信息
        String leftText = "Left Angle: " + leftAngle + "\nLeft Position: (" + leftX + ", " + leftY + ")";
        canvas.drawText(leftText, 50, 50, new Paint());

        // 绘制右摇杆信息
        String rightText = "Right Angle: " + rightAngle + "\nRight Position: (" + rightX + ", " + rightY + ")";
        canvas.drawText(rightText, 50, 100, new Paint());
    }
}

在DisplayView类中,我们保存了左右摇杆的角度和位置信息,并提供了一个update方法来更新这些信息。在onDraw方法中,我们使用Canvas绘制了左右摇杆的角度和位置信息。

最后,我们需要在布局文件中添加DisplayView和BottomRockerFragment。请将以下代码添加到activity_main.xml中:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.example.myapplication.DisplayView
        android:id="@+id/display_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:gravity="center_horizontal" />

    <fragment
        android:id="@+id/bottom_rocker_fragment"
        android:name="com.example.myapplication.BottomRockerFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/display_view" />

</RelativeLayout>

在布局文件中,我们添加了一个DisplayView和一个BottomRockerFragment。DisplayView用于显示摇杆的角度和位置信息,而BottomRockerFragment用于控制摇杆的移动。

这样,我们就完成了在BottomRockerFragment中添加和修改代码,并在布局中显示DisplayView和BottomRockerFragment的步骤。运行应用程序后,你应该能够看到DisplayView上显示了左右摇杆的角度和位置信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值