Dowiedziałem się, że setPivotX
(także setPivotY
) działa dziwnie w systemie Android. Jeśli ustawisz przestawny, gdy skala widoku jest ustawiona na 1.00f nic się nie dzieje (tylko zmiany przestawne). Jeśli jednak skala nie jest równa 1,0f (np. setScaleX(0.9f)
), a widok przestawny, widok przesuwa się względnie (?) Do nowego obrotu. Czy to nie dziwne? Wiem, że pozycje poziome i pionowe (tłumaczenia) NIE są powiązane z wartością przestawną, ale dlaczego widok przesuwa się ze współczynnikiem skali innym niż 1.0f?setPivotX działa dziwnie na skalowanym widoku
Proszę to sprawdzić z częścią skalującą i bez niej.
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);
}
}
Jak ustawić tę samą pozycję widoku, która była przed zmianą osi obrotu?
Wydaje mi się, że to błąd w Androidzie. Skalowanie punktu obrotu odbywa się poprzez przekształcenie na oś obrotu, wykonanie skali i tłumaczenie z powrotem. Operacje 'setScale' powinny to robić, a widok nie powinien się przeskakiwać. Skalowanie to operacja, która nie powinna w widoczny sposób tłumaczyć widoków. –
Witam, natknąłem się na ten sam problem i udało mi się to naprawić z twoją odpowiedzią. Nadal jednak zastanawiam się, jak działa narzędzie Pivot na skalowanych widokach. Czy możesz podać jakieś wskazówki, a może link? Z góry dzięki. – aleien
@aleien przepraszam Nie mogę ci pomóc, nie sądzę, że istnieje jakakolwiek wskazówka dotycząca skalowania widoków za pomocą punktów przestawnych. – tomrozb