Saya punya GridView
. Data GridView
permintaan dari server.
Berikut adalah tata letak item di GridView
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/analysis_micon_bg"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingBottom="@dimen/half_activity_vertical_margin"
android:paddingLeft="@dimen/half_activity_horizontal_margin"
android:paddingRight="@dimen/half_activity_horizontal_margin"
android:paddingTop="@dimen/half_activity_vertical_margin" >
<ImageView
android:id="@+id/ranking_prod_pic"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:contentDescription="@string/app_name"
android:scaleType="centerCrop" />
<TextView
android:id="@+id/ranking_rank_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/ranking_prod_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/ranking_prod_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Saya meminta data dari server, mendapatkan url gambar dan memuat gambar ke Bitmap
public static Bitmap loadBitmapFromInputStream(InputStream is) {
return BitmapFactory.decodeStream(is);
}
public static Bitmap loadBitmapFromHttpUrl(String url) {
try {
return loadBitmapFromInputStream((InputStream) (new URL(url).getContent()));
} catch (Exception e) {
Log.e(TAG, e.getMessage());
return null;
}
}
dan ada kode getView(int position, View convertView, ViewGroup parent)
metode dalam adaptor
Bitmap bitmap = BitmapUtil.loadBitmapFromHttpUrl(product.getHttpUrl());
prodImg.setImageBitmap(bitmap);
Ukuran gambar adalah 210*210
. Saya menjalankan aplikasi saya pada Nexus 4. Gambar memang mengisi ImageView
lebar, tetapi ImageView
tingginya tidak skala. ImageView
tidak menampilkan seluruh gambar.
Bagaimana saya mengatasi masalah ini?
fill_parent
untuk lebar hanyalah praktik yang baik, ukuran tetap juga berfungsi.Saya suka jawaban arnefm tetapi dia membuat kesalahan kecil (lihat komentar) yang akan saya coba perbaiki:
Dengan demikian Anda
ImageView
akan diskalakan dengan benar dan tidak akan memiliki masalah dimensi jika (misalnya) dimasukkan ke dalamScrollView
sumber
there
merupakan linkSaya punya masalah yang sama sekali. Saya menyelesaikannya dengan membuat ImageView kustom.
Kemudian timpa metode onMeasure dari tampilan gambar. Saya melakukan sesuatu seperti ini, saya percaya:
Ini akan meregangkan gambar agar sesuai dengan layar sambil mempertahankan rasio aspek.
sumber
android:layout_height="wrap_content"
. Dalam hal iniMeasureSpec.getSize(heightMeasureSpec)
akan0
dan AndaviewSideRatio
akan menghasilkanInfinity
(tidak perlu bertanya-tanya, Java float memungkinkan nilai-nilai tersebut.) Dalam hal ini Andaheight
danwidth
akan0
.Gunakan
android:scaleType="centerCrop"
.sumber
Saya melakukan sesuatu yang mirip dengan di atas dan kemudian membenturkan kepala ke dinding selama beberapa jam karena tidak berfungsi di dalam a
RelativeLayout
. Saya berakhir dengan kode berikut:Dan untuk mencegah
RelativeLayout
dari mengabaikan dimensi yang diukur saya melakukan ini:sumber
Gunakan properti ini di ImageView untuk menjaga rasio aspek:
sumber
Ini tidak akan berlaku jika Anda mengatur gambar sebagai latar belakang di ImageView, perlu diatur di src (android: src).
Terima kasih.
sumber
Untuk membuat gambar dengan lebar sama dengan lebar layar, dan tinggi diatur secara proporsional sesuai dengan aspek rasio, lakukan hal berikut.
Semoga ini membantu.
sumber
Coba ini: itu memecahkan masalah bagi saya
sumber
Anda tidak memerlukan kode java. Anda hanya perlu:
Kuncinya ada di induk pertandingan untuk lebar dan tinggi
sumber
coba dengan baris sederhana ini ... tambahkan baris ini dalam kode xml Anda di tag tampilan gambar tanpa menambahkan ketergantungan Android: scaleType = "fitXY"
sumber
gunakan android: ScaleType = "fitXY" di ImageView xml
sumber
Anda dapat mencoba melakukan apa yang Anda lakukan dengan memuat gambar secara manual, tetapi saya akan sangat menyarankan melihat Universal Image Loader .
Saya baru-baru ini mengintegrasikannya ke dalam proyek saya dan saya harus mengatakan itu fantastis. Apakah semua mengkhawatirkan tentang membuat hal-hal asinkron, mengubah ukuran, caching gambar untuk Anda. Sangat mudah untuk mengintegrasikan dan mengatur. Dalam 5 menit Anda mungkin bisa melakukan apa yang Anda inginkan.
Kode contoh:
Ini dapat dengan malas memuat gambar, menyesuaikannya dengan ukuran imageView yang memperlihatkan gambar placeholder saat memuat, dan menampilkan ikon default jika memuat gagal dan melakukan cache sumber daya.
- Saya juga harus menambahkan bahwa konfigurasi saat ini menjaga rasio aspek gambar, karenanya berlaku untuk pertanyaan awal Anda
sumber
Cukup gunakan UniversalImageLoader dan atur
dan tidak ada pengaturan skala pada ImageView
sumber
Saya punya masalah serupa, saya menemukan alasan untuk ini adalah karena Anda perlu menghitung
dp
. Android studio menghitungImageView
kapan Anda memuatnya daridrawable
, tetapi ketika Anda menggunakan metode lain, seperti memuat dari bitmap tersebutdp
tidak secara otomatis menyumbang,Inilah xml saya
Saya menggunakan Kotlin, dan memuat yang dapat ditarik dari file aset, inilah cara saya menghitung ini
sumber
Gunakan picasso yang mudah digunakan ..
Di Adaptor Anda ..
http://square.github.io/picasso/
sumber