小编Abd*_*o21的帖子

在 Android 中,如何在从锚点旋转自定义视图时固定其位置?

我有一个名为的自定义视图MyView,它有两个锚点。我希望能够从其锚点旋转此视图,其中一个锚点充当旋转中心,而用户拖动另一个锚点。

为了简单起见,我画了一条线,但实际上,我会画别的东西。步骤如下:

  • 如果用户单击视图本身,则平移视图。
  • 如果用户单击其中一个锚点,请计算旋转角度并使用setPivotX()和使另一个锚点成为旋转中心setPivotY()

这是相关代码:

@Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN: {
                tapX = event.getX();
                tapY = event.getY();

                if (anchorRect1.contains(tapX, tapY)) {
                    viewState = ViewState.ANCHOR1;
                    setPivotX(anchorRect2.centerX());
                    setPivotY(anchorRect2.centerY());
                } else if (anchorRect2.contains(tapX, tapY)) {
                    viewState = ViewState.ANCHOR2;
                    setPivotX(anchorRect1.centerX());
                    setPivotY(anchorRect1.centerY());
                } else {
                    viewState = ViewState.VIEW;
                }
                break;
            }
            case MotionEvent.ACTION_MOVE: {
                switch (viewState) {
                    //Anchor 1 clicked
                    case ANCHOR1: {
                        float angle = (float) Math.toDegrees(Math.atan2(event.getY() - anchorRect2.centerY(), getWidth()));
                        setRotation(getRotation() …
Run Code Online (Sandbox Code Playgroud)

java android rotation android-custom-view kotlin

6
推荐指数
0
解决办法
216
查看次数

标签 统计

android ×1

android-custom-view ×1

java ×1

kotlin ×1

rotation ×1