gpt4 book ai didi

android - setPivotX 在缩放 View 上工作很奇怪

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:43:12 35 4
gpt4 key购买 nike

我发现 setPivotX(还有 setPivotY)在 Android 中运行很奇怪。如果在 View 的比例设置为 1.00f 时设置枢轴,则不会发生任何事情(只是枢轴发生变化)。但是,如果比例不等于 1.0f(例如 setScaleX(0.9f))并且您设置了枢轴,则 View 会相对(?)移动到新的枢轴。是不是很奇怪?我知道水平和垂直位置(平移)与枢轴值无关,但为什么 View 以 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);
}
}

如何将 View 的位置设置为与轴心变化之前相同的位置?

最佳答案

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

@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;
}

主要的问题是了解枢轴如何在缩放 View 上工作,那么奇怪的枢轴行为应该不会有任何问题。

关于android - setPivotX 在缩放 View 上工作很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14415035/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com