W Androidzie zdefiniowałem ImageView
„s”layout_width
ma być fill_parent
(co zajmuje całą szerokość telefonu).
Jeśli obraz, który umieściłem, ImageView
jest większy niżlayout_width
, Android go skaluje, prawda? Ale co z wysokością? Czy po skalowaniu obrazu system Android zachowa proporcje?
Dowiedziałem się, że u góry iu dołu, ImageView
gdy Android skaluje obraz, który jest większy niż ten, jest biała przestrzeń ImageView
. Czy to prawda? Jeśli tak, jak mogę wyeliminować tę białą przestrzeń?
setImageBitmap
jest taki sam jakandroid:src="..."
isetBackground...
jestandroid:background="..."
image.setImageDrawable(...)
jest równieżandroid:src="..."
w formacie xml.android:adjustViewBounds
był ostatnim elementem mojej układanki, dzięki!Zobaczyć
android:adjustViewBounds
.źródło
Wszystkim innym, którzy mają ten konkretny problem. Masz taki
ImageView
, który chcesz mieć szerokośćfill_parent
i wysokość proporcjonalnie skalowane:Dodaj te dwa atrybuty do
ImageView
:I ustaw
ImageView
szerokość nafill_parent
i wysokość nawrap_content
.Ponadto, jeśli nie chcesz przycinać swojego obrazu, spróbuj tego:
źródło
View
)”. AFAICT żaden inny widok nie maadjustViewBounds
aniscaleType
atrybutów.Jeśli chcesz,
ImageView
aby zarówno skalować w górę, jak i w dół przy zachowaniu odpowiedniego współczynnika proporcji, dodaj to do swojego XML:Dodaj to do swojego kodu:
Zajęło mi trochę czasu, aby to zadziałało, ale wydaje się, że działa to zarówno w przypadku, gdy obraz jest mniejszy niż szerokość ekranu, jak i większy niż szerokość ekranu, i nie zawiera obrazu.
źródło
To działało dla mnie:
źródło
to rozwiązało mój problem
źródło
Poniżej kodu Praca ze skalowanym obrazem jako współczynnik kształtu:
źródło
Spójrz na ImageView.ScaleType, aby kontrolować i zrozumieć sposób zmiany rozmiaru w pliku
ImageView
. Po zmianie rozmiaru obrazu (przy zachowaniu jego współczynnika proporcji) są szanse, że albo wysokość, albo szerokość obrazu stanie się mniejsza niżImageView
wymiary.źródło
Użyj tych właściwości w ImageView, aby zachować proporcje:
źródło
Tak to działało dla mnie w ConstraintLayout:
Następnie w kodzie ustawiam drawable jako:
To ładnie pasuje do obrazu zgodnie z jego proporcjami i utrzymuje go w środku.
źródło
Mam obraz mniejszy niż ekran. Aby rozciągnąć go proporcjonalnie do maksimum i wyśrodkować w widoku, musiałem użyć następującego kodu:
Pamiętaj jednak, że jeśli masz względny układ i niektóre elementy mają być ustawione powyżej lub poniżej ImageView, najprawdopodobniej zostaną one nałożone na obraz.
źródło
Jeśli jakość obrazu spada: użyj
zamiast
źródło
Dla każdego z was, który chce, aby obraz dokładnie pasował do widoku obrazu z odpowiednim skalowaniem i bez przycinania
gdzie imageView jest widokiem reprezentującym twój ImageView
źródło
Możesz obliczyć szerokość ekranu. Możesz skalować bitmapę.
obliczyć szerokość ekranu i skalowaną wysokość obrazu według szerokości ekranu.
Po skalowaniu bitmapy.
źródło
Robiąc to programowo, pamiętaj, aby wywoływać setery we właściwej kolejności:
źródło
Jeśli chcesz, aby Twój obraz zajmował maksymalną możliwą przestrzeń, najlepszą opcją byłoby
źródło
Nie potrzebujesz kodu Java. Ty po prostu musisz :
Klucz znajduje się w rodzicu dopasowania dla szerokości i wysokości
źródło
Spróbuj użyć
android:layout_gravity
ImageView:Powyższy przykład działał dla mnie.
źródło
Mam algorytm do skalowania mapy bitowej, aby najlepiej dopasować wymiary pojemnika, zachowując jego proporcje. Proszę znaleźć moje rozwiązanie tutaj
Mam nadzieję, że to pomoże komuś zejść z linii!
źródło
Używam tego:
źródło
w przypadku użycia
cardview
do zaokrąglaniaimageview
i naprawionegoandroid:layout_height
dla nagłówka działało to dla mnie, aby załadować obrazGlide
źródło
Możesz skalować obraz, co również zmniejszy jego rozmiar. Istnieje biblioteka, którą można pobrać i używać. https://github.com/niraj124124/Images-Files-scale-and-compress.git
Jak korzystać 1) Zaimportuj kompresor-v1.0. słoik do twojego projektu. 2) Dodaj poniższy przykładowy kod do przetestowania. ResizeLimiter resize = ImageResizer.build (); resize.scale („inputImagePath”, „outputImagePath”, imageWidth, imageHeight); Istnieje wiele innych metod, zgodnie z Twoimi wymaganiami
źródło
Przekaż ImageView i na podstawie wysokości i szerokości ekranu możesz to zrobić
źródło
Szybka odpowiedź:
źródło
źródło