android: rozciągnij obraz w widoku obrazu, aby dopasować go do ekranu

126

Mam imageview, które ma swoją wysokość i szerokość zestawu do fill_parentz linearlayout, który ma ten sam zestaw wartości. Więc przypuszczam, że to powinno dopasować moje obrazy do ekranu. Ale pasuje tylko do 80% (marginesy na górze i na dole w trybie poziomym).

Próbowałem następującego kodu bez powodzenia:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

imgView.setMinimumWidth(width);
imgView.setMinimumHeight(height);

imgView.setMaxWidth(width);
imgView.setMaxHeight(height);

Jakieś inne pomysły?

Johan
źródło
Chociaż jest to nieco inny problem, ta odpowiedź powinna ci pomóc.
fredley,

Odpowiedzi:

317

aby zmienić programowo użycie:

imgview.setScaleType(ScaleType.FIT_XY);

LUB

aby zmienić z xml użyj:

 android:scaleType="fitXY"
Pinki
źródło
26
Wiem, że tego właśnie chciałeś, ale w przypadku obrazów, w których zależy Ci na współczynniku proporcji, będzie to rozciągać.
Artem Russakovskii
Działa cuda w przypadku ImageView w ScrollView. Nawet aspekt jest poprawny.
JNissi
10
To samo można zdefiniować w układzie xml, android: scaleType = "fitXY"
Sathesh,
9
Aby obraz wypełnił cały obszar i zachował dobry współczynnik proporcji, użyjv.setAdjustViewBounds(true); v.setScaleType(ImageView.ScaleType.CENTER_CROP);
Marco Florian
1
Działa jak urok
dave o grady
119

Podaj plik xml swojego układu android:scaleType="fitXY"
PS: dotyczy to sytuacji, gdy obraz jest ustawiony z, android:src="..."a nie android:background="..."jako tła są domyślnie ustawione na rozciąganie i dopasowanie do widoku.

Sen
źródło
rzeczy w tle nie pomogły mi rozwiązać problemu, czy robię coś nie tak? proszę spojrzeć na: stackoverflow.com/questions/14164473/…
Dheeraj Bhaskar
1
To nie dba o współczynnik proporcji, jeśli zakodujesz na stałe szerokość obrazów i chcesz, aby wysokość była skalowana
Akshat Agarwal,
Jak mogę to dopasować do całego ekranu? Chcę, żeby nadal było proporcjonalne
Ruchir Baronia
+1 za stwierdzenie, że dotyczy androida: src = "..." zamiast android: background = "..." to jest bardzo ważne
DragonFire
20

Użyj tego:

ImageView.setAdjustViewBounds(true);
Lalit kumar
źródło
4
To w połączeniu z android:scaleType="fitXY"tym, co zadziałało. Dzięki
smac89
@ smac89 Jaka jest różnica między tymi kombinacjami a samym użyciem FIT_CENTER? Nie należy używać FIT_CENTER?
Jenix
@Jenix, pamiętaj, że minęło trochę czasu od ostatniego dotknięcia Androida, ale uważam, że powodem tego fitXYjest to, że obraz jest rozciągany proporcjonalnie, aby pasował do ramki / widoku, w którym został ustawiony. Używanie FIT_CENTERdźwięków tak, jakby po prostu umieściło obraz w środku widoku, ale nie wypełnia widoku. Może się mylę, ale możesz poeksperymentować z jednym z nich, aby dowiedzieć się, co działa
smac89
@ smac89 Zanim zapytałem, przetestowałem już oba z nich i działało tak samo. Byłem ciekawy powodu, ale teraz myślę, że nie znasz FIT_CENTER, tak jak fakt, że nie wiedziałem o kombinacji, którą mi przekazałeś. :)
Jenix
9

jeśli używasz android:scaleType="fitXY", musisz określić

android:layout_width="75dp" i android:layout_height="75dp"

jeśli użyjesz wrap_content, nie rozciągnie się do tego, czego potrzebujesz

<ImageView
android:layout_width="75dp"
android:layout_height="75dp"
android:id="@+id/listItemNoteImage"
android:src="@drawable/MyImage"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_marginStart="12dp"
android:scaleType="fitXY"/>
Ozear
źródło
7

Przyjęta odpowiedź jest idealna, jednak jeśli chcesz to zrobić z xml, możesz użyć android:scaleType="fitXY"

Bibaswann Bandyopadhyay
źródło
2

Użyłem tego android:scaleType="fitXY"kodu w pliku Xml.


źródło
0

po prostu zmień wysokość i szerokość ImageView na wrap_content i użyj

exampleImage.setScaleType (ImageView.ScaleType.FIT_XY);

w swoim kodzie.

Ankur Yadav
źródło
-11

Próbuję użyć:

imageview.setFitToScreen(true);
imageview.setScaleType(ScaleType.FIT_CENTER);

Spowoduje to dopasowanie widoku obrazu do ekranu z prawidłowym współczynnikiem.

Lincy
źródło
12
"imageview.setFitToScreen (true);" - co to jest? jakaś nieudokumentowana metoda?
Malachiasz
Używam zaćmienia i to się nie kompiluje:imageview.setFitToScreen(true)
uczeń
5
W Androidzie nie ma takiej metody.
NightFury
Może miał na myśli setFitsSystemWindows()??
zakaz geoinżynierii