Mam niestandardowy widok, w którym używam transformacji. Do tej pory tak dobrze, funkcja jak setRotationY()
, setScaleX()
, setTranslationY()
lub nawet getMatrix()
działa zgodnie z oczekiwaniami, jestem w stanie manipulować mój widok i wyświetla się dobrze. Tam, gdzie uderzyłem w ścianę, wiele funkcji zachowuje się dziwnie po tym. Na przykład funkcja taka jak getHitRect()
zwraca całkowicie dziwne wartości! To nie pomaga moim wydarzeniom dotykowym.Jak uzyskać prawidłowe granice widoku po transformacji Macierz
Próbowałem przeładować funkcję, ale nadal nie działa, szczególnie przy użyciu obracania lub skalowania (Tłumaczenie działa poprawnie). Myślę, że to ma coś wspólnego z tym, że matryca jest wyrażana w podrzędnej współrzędnej, więc w jaki sposób mogę ją uzyskać we współrzędnej rodziców?
@Override
public void getHitRect(Rect outRect){
RectF rect = new RectF();
rect.top = (float) this.getTop();
rect.bottom = (float) this.getBottom();
rect.left = (float) this.getLeft();
rect.right = (float) this.getRight();
this.getMatrix().mapRect(rect);
rect.round(outRect);
}
Czy mogę uzyskać prostszą wartość bezpośrednio z jakiejś funkcji? Podobnie jak nowa wysokość, szerokość, góra lub dół.
Bardzo dziękuję za odpowiedź, to mi pomaga :) –
Inną rzeczą dla systemu Android> = 4.0: 'getHitRect()' nie zostanie wywołana automatycznie, jeśli jesteś na widoku kliknięcie. Aby dodać kompatybilność dla projektów używających SDK <4.0, użycie 'isTransformedTouchPointInView()' na rodzica działa, nawet jeśli nie jest idealne. –