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?


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"

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.


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);

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"/>


2

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


0

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

exampleImage.setScaleType (ImageView.ScaleType.FIT_XY);

w swoim kodzie.


-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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.