Android ではsetPivotX
(これも) 奇妙な動作をすることがわかりました。setPivotY
ビューのスケールが 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);
}
}
ピボットが変更される前と同じビューの位置を設定するにはどうすればよいですか?