ya .. sepertinya perbatasan. Tetapi ketika Anda menggunakan gambar yang dapat digambar dengan latar belakang transparan, maka gambar Anda dengan batas tidak akan ditampilkan dengan benar. itu menunjukkan warna hitam di mana pun Anda memiliki transparan. Jadi jawaban Anda bukanlah pendekatan terbaik.
Praveen
19
Ya! tetapi Anda memiliki perbatasan tanpa membuat file xml lain.
user609239
7
Ini tidak berfungsi saat Anda mengubah ukuran gambar menggunakan android:scaleType="centerCrop".
Silox
8
ini buruk karena itu menciptakan penarikan berlebih yang tidak perlu
Jay Soyer
1
@ Silox untuk scaleType="centerCrop", pastikan juga menambahkancropToPadding="true"
Adam Johns
24
Ini adalah pos lama yang saya tahu, tetapi saya pikir ini mungkin dapat membantu seseorang di luar sana.
Jika Anda ingin mensimulasikan batas tembus pandang yang tidak tumpang tindih dengan warna "solid" bentuk, gunakan ini di xml Anda. Perhatikan bahwa saya tidak menggunakan tag "stroke" di sini sama sekali karena tampaknya selalu tumpang tindih dengan bentuk gambar yang sebenarnya.
Saya suka ini juga, tetapi jika Anda membuat tepi luar terlalu kecil, sudutnya kosong. Ini berfungsi baik dengan apa pun 2dp dan di atasnya.
John Stack
Manfaat dari metode ini adalah memungkinkan untuk sudut yang membulat. Jika Anda tidak ingin batas dari jawaban sebelumnya tumpang tindih, tambahkan padding ke tag ImageView. Kelemahan dari metode ini adalah bahwa batas akan berdarah ke area gambar jika menggunakan latar belakang transparan. Jadi saya memilih metode sebelumnya karena saya suka latar belakang yang tembus lebih baik daripada sudut yang membulat.
hanya catatan tentang ini, jika gambar diatur secara dinamis maka perbatasan perlu diatur lagi dalam kode lain yang bijak gambar di atas perbatasan.
Rob85
4
Buat Perbatasan
Buat file xml (mis. "Frame_image_view.xml") dengan konten berikut di folder yang dapat digambar:
<?xml version="1.0" encoding="utf-8"?><shapexmlns:android="http://schemas.android.com/apk/res/android"><strokeandroid:width="@dimen/borderThickness"android:color="@color/borderColor"/><paddingandroid:bottom="@dimen/borderThickness"android:left="@dimen/borderThickness"android:right="@dimen/borderThickness"android:top="@dimen/borderThickness"/><cornersandroid:radius="1dp"/><!-- remove line to get sharp corners --></shape>
Ganti @dimen/borderThicknessdan @color/borderColordengan apa pun yang Anda inginkan atau tambahkan dimen / warna yang sesuai.
Tambahkan Drawable as background ke ImageView Anda:
Anda harus menggunakan android:cropToPadding="true", jika bantalan yang ditentukan tidak memiliki efek. Atau gunakan android:padding="@dimen/borderThickness"di ImageView Anda untuk mencapai hal yang sama. Jika perbatasan membingkai induk alih-alih ImageView Anda, coba gunakan android:adjustViewBounds="true".
Ubah Warna Batas
Cara termudah untuk mengubah warna batas Anda dalam kode menggunakan atribut tintBackgound.
ImageView img = findViewById(R.id.my_image_view);
img.setBackgroundTintList(ColorStateList.valueOf(Color.RED);// changes border color to red
Setelah meneliti sebentar, menggunakan foregroundatribut dari jawaban SO ini di sini memberikan hasilandroid:foreground="@drawable/all_round_border_white"
sayangnya itu memberi saya sudut perbatasan "tidak baik" seperti gambar di bawah ini:
1) Edit bingkai untuk memiliki konten di dalamnya (dengan alat 9patch).
2) Tempatkan bagian ImageViewdalam a Linearlayout, dan atur latar belakang bingkai atau warna yang Anda inginkan sebagai latar belakang Linearlayout. Saat Anda mengatur bingkai untuk memiliki konten di dalamnya, Anda ImageViewakan berada di dalam bingkai (tepat di mana Anda mengatur konten dengan alat 9patch).
Berikut ini adalah solusi paling sederhana saya untuk masalah yang panjang ini.
<FrameLayout
android:layout_width="112dp"
android:layout_height="112dp"
android:layout_marginLeft="16dp" <!-- May vary according to your needs -->
android:layout_marginRight="16dp" <!-- May vary according to your needs -->
android:layout_centerVertical="true">
<!-- following imageView acts as the boarder which sitting in the background of our main container ImageView --><ImageViewandroid:layout_width="112dp"android:layout_height="112dp"android:background="#000"/><!-- following imageView holds the image as the container to our image --><!-- layout_margin defines the width of our boarder, here it's 1dp --><ImageViewandroid:layout_width="110dp"android:layout_height="110dp"android:layout_margin="1dp"android:id="@+id/itemImageThumbnailImgVw"android:src="@drawable/banana"android:background="#FFF"/></FrameLayout>
Dalam jawaban berikut saya sudah menjelaskannya dengan cukup baik, silakan lihat juga!
Saya harap ini akan membantu orang lain di luar sana!
Jawaban:
Saya mengatur xml di bawah ini ke latar belakang Tampilan Gambar sebagai Gambar. Berhasil.
Dan kemudian tambahkan
android:background="@drawable/yourXmlFileName"
keImageView
sumber
android:background="@drawable/yourXmlFileName"
keImageView
Berikut ini adalah kode yang saya gunakan untuk memiliki batas hitam. Perhatikan bahwa saya belum menggunakan file xml tambahan untuk perbatasan.
sumber
android:scaleType="centerCrop"
.scaleType="centerCrop"
, pastikan juga menambahkancropToPadding="true"
Ini adalah pos lama yang saya tahu, tetapi saya pikir ini mungkin dapat membantu seseorang di luar sana.
Jika Anda ingin mensimulasikan batas tembus pandang yang tidak tumpang tindih dengan warna "solid" bentuk, gunakan ini di xml Anda. Perhatikan bahwa saya tidak menggunakan tag "stroke" di sini sama sekali karena tampaknya selalu tumpang tindih dengan bentuk gambar yang sebenarnya.
sumber
ImageView
dalam file xmlsimpan kode di bawah ini dengan nama
border_image.xml
dan itu harus dalam folder yang dapat digambarjika Anda ingin memberikan sudut bulat ke batas gambar maka Anda dapat mengubah baris dalam file border.xml
sumber
Buat Perbatasan
Buat file xml (mis. "Frame_image_view.xml") dengan konten berikut di folder yang dapat digambar:
Ganti
@dimen/borderThickness
dan@color/borderColor
dengan apa pun yang Anda inginkan atau tambahkan dimen / warna yang sesuai.Tambahkan Drawable as background ke ImageView Anda:
Anda harus menggunakan
android:cropToPadding="true"
, jika bantalan yang ditentukan tidak memiliki efek. Atau gunakanandroid:padding="@dimen/borderThickness"
di ImageView Anda untuk mencapai hal yang sama. Jika perbatasan membingkai induk alih-alih ImageView Anda, coba gunakanandroid:adjustViewBounds="true"
.Ubah Warna Batas
Cara termudah untuk mengubah warna batas Anda dalam kode menggunakan atribut tintBackgound.
atau
Jangan lupa untuk mendefinisikan
newColor
.sumber
Tambahkan latar belakang Drawable like res / drawables / background.xml:
Perbarui latar belakang ImageView di res / layout / foo.xml:
Kecualikan pad ImageView jika Anda ingin src untuk menggambar di atas latar belakang.
sumber
Ini telah digunakan di atas tetapi tidak disebutkan secara eksklusif.
Jika benar , gambar akan dipotong agar pas dengan padding-nya.
Ini akan membuat
ImageView
sumber agar sesuai dengan padding yang ditambahkan ke latar belakangnya.Melalui XML dapat dilakukan sebagai berikut-
sumber
Anda harus membuat background.xml dalam res / drawable code ini
sumber
Bagi mereka yang mencari batas kustom dan bentuk ImageView. Anda dapat menggunakan android-shape-imageview
Tambahkan saja
compile 'com.github.siyamed:android-shape-imageview:0.9.+@aar'
kebuild.gradle
.Dan gunakan dalam tata letak Anda.
sumber
Saya hampir menyerah tentang ini.
Ini adalah kondisi saya menggunakan luncuran untuk memuat gambar, lihat masalah luncuran terperinci di sini tentang transformasi sudut bulat dan di sini
Saya juga memiliki atribut yang sama untuk saya
ImageView
, untuk semua orang yang menjawab di sini 1 , di sini 2 & di sini 3Namun tetap tidak berhasil.
Setelah meneliti sebentar, menggunakan
foreground
atribut dari jawaban SO ini di sini memberikan hasilandroid:foreground="@drawable/all_round_border_white"
sayangnya itu memberi saya sudut perbatasan "tidak baik" seperti gambar di bawah ini:
sumber
Saya merasa jauh lebih mudah untuk melakukan ini:
1) Edit bingkai untuk memiliki konten di dalamnya (dengan alat 9patch).
2) Tempatkan bagian
ImageView
dalam aLinearlayout
, dan atur latar belakang bingkai atau warna yang Anda inginkan sebagai latar belakangLinearlayout
. Saat Anda mengatur bingkai untuk memiliki konten di dalamnya, AndaImageView
akan berada di dalam bingkai (tepat di mana Anda mengatur konten dengan alat 9patch).sumber
Berikut ini adalah solusi paling sederhana saya untuk masalah yang panjang ini.
Dalam jawaban berikut saya sudah menjelaskannya dengan cukup baik, silakan lihat juga!
Saya harap ini akan membantu orang lain di luar sana!
sumber
Dalam xml yang sama saya gunakan selanjutnya:
sumber
Pertama menambahkan warna latar yang Anda inginkan sebagai warna perbatasan Anda, lalu
ubah cropToPadding menjadi true dan setelah itu tambahkan padding.
Maka Anda akan memiliki batas untuk imageView Anda.
sumber