setPivotX工作在缩放查看怪(setPivotX works strange on scale

2019-08-07 10:51发布

我发现setPivotX (也setPivotY )在Android能怪。 如果设置了旋转时视图的比例设置为1.00F任何操作(转动只是改变)。 但如果规模不等于1.0F(如setScaleX(0.9f)和你相对(?)的新支点设置枢轴视图移动。 这不是很奇怪吗? 我知道,水平和垂直位置(翻译)是不相关的枢纽价值,但为什么观与比例因子移动以外1.0F?

请使用和不使用缩放部检查了这一点。

public class ScaleView extends View {

private final ScaleGestureDetector mScaleGestureDetector;

public ScaleView(Context context, AttributeSet attrs) {
    super(context, attrs);


    //setScaleX(0.9f);
    //setScaleY(0.9f);

    mScaleGestureDetector = new ScaleGestureDetector(context, new ScaleGestureDetector.OnScaleGestureListener() {

        @Override
        public void onScaleEnd(ScaleGestureDetector detector) {
            // does nothing intentionally
        }

        @Override
        public boolean onScaleBegin(ScaleGestureDetector detector) {
            setPivotX(detector.getFocusX());
            setPivotY(detector.getFocusY());
            return true;
        }

        @Override
        public boolean onScale(ScaleGestureDetector detector) {
            return false;
        }
    });
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    mScaleGestureDetector.onTouchEvent(event);
    return super.onTouchEvent(event);
}
}

如何设置的观点,这是枢轴改变之前的相同位置?

Answer 1:

我解决了这个问题。 这里是工作的代码:

@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
    float newX = detector.getFocusX();
    float newY = detector.getFocusY();
    setTranslationX(getTranslationX() + (getPivotX() - newX) * (1 - getScaleX()));
    setTranslationY(getTranslationY() + (getPivotY() - newY) * (1 - getScaleY()));
    setPivotX(newX);
    setPivotY(newY);
    return true;
}

主要的问题是了解如何按比例调整的意见枢纽工程,那么不应该用异样的支点行为的任何问题。



Answer 2:

@aleien,我可以回答你的问题。 当设置一个新的支点,视图的属性将被重新计算。 的Android重新调整与新枢轴但其导致新的缩放视图相同的刻度值的原始观点的旧缩放视图之间的偏移。 偏移只是(getPivotX() - newX) * (1 - getScaleX())为了抵消这种偏移,我们可以使用setTranslationX() 希望我的回答能帮助你!



文章来源: setPivotX works strange on scaled View