wersja krótka:
clip_horizontal i clip_vertical odnoszą się do pomiarów widoku siebie, zanim jakiekolwiek zawartości (takich jak zdjęcia w BitmapDrawable) są renderowane.
Długa wersja:
Zabrakło mi do jakiegoś podobnego zamieszania nad clip_horizontal i clip_vertical. (W moim przypadku było to związane z Androidem: grawitacja dla BitmapDrawable, ale jest wystarczająco podobna, aby można ją było zastosować.)
Z dokumentacji pomyślałem, że coś podobnego do androida: gravity = "top | left | clip_vertical" na bitmapa spowodowałaby umieszczenie lewego górnego rogu obrazu w lewym górnym rogu widoku, a jeśli bitmapa byłaby wyższa niż widok, byłaby "przycięta" w dolnej krawędzi widoku. Innymi słowy, pokazuj tylko tyle bitmapy, ile widok jest wystarczająco duży, by ją ujawnić; nie rozciągaj mapy bitowej, ale pokazuj tylko to, co pasuje, pozwalając reszcie rozciągać się poniżej dolnej krawędzi.
Jednak stało się odwrotnie: kiedy ustawiłem clip_vertical, duża bitmapa została zgnieciona pionowo, aby zmieścić się w wysokości widoku.
Po zbadaniu sposobu applyDisplay() w platformy/technologii/core/JAVA/Android/view/Gravity.java, zdałem sobie sprawę, mój błąd:
To nie jest mapa bitowa obraz że jechał być przycięte, ale rzeczywisty rozmiar kontenera, w którym ostatecznie jest renderowany obraz, to .
Ustawienie clip_vertical w moim przypadku nie oznaczało "przycięcia obrazu przy dolnej krawędzi", oznaczało "przycięcie samego widoku BitmapDrawable, tak aby jego wysokość odpowiadała wysokości jego kontenera nadrzędnego" ... co spowodowało, że obraz zostać "zgnieciony", ponieważ wypełnił on krótszą wysokość.
Tak, ważne jest, aby pamiętać o android: grawitacja i Android: layout_gravity że clip_horizontal i clip_vertical zastosowanie do pomiarów widzenia sama, zanim jakiekolwiek treści (takich jak mój BitmapDrawable) są renderowane.
Dziękuję za wyjaśnienia! To tak jakby ktoś zapalił światło w ciemnym zakątku mojej wiedzy na Androida. Twoje zdrowie! – SlashG