我發現,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