我发现,setPivotX
(也setPivotY
)在Android中奇怪的作品。如果在视图的比例设置为1.00时设置pivot,则不会发生任何事情(只是透视更改)。但是,如果比例不等于1.0f(例如setScaleX(0.9f)
)并且您设置了透视,则视图会相对(?)移动到新透视。这不奇怪吗?我知道水平和垂直位置(平移)与枢轴值无关,但为什么视图以1.0f以外的比例因子移动?setPivotX作品奇怪的缩放查看
请检查有无缩放部分。
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);
}
}
如何设置视图的相同位置,该位置在透视改变之前?
这看起来像Android中的一个bug给我。通过转换到数据透视图,执行缩放并翻译回来完成关于枢轴点的缩放。 'setScale'操作应该这样做,View不应该跳过。缩放是一种不应该可视化翻译视图的操作。 –
嗨,我偶然发现了同样的问题,并能够解决它与您的答案。但是,我仍然想知道,如何在缩放视图上工作。你能提供一些指导方针,或者可能是一个链接? 在此先感谢。 – aleien
@aleien抱歉,我不能帮你,我不认为有任何关于使用枢轴点缩放视图的指导原则。 – tomrozb