Yanıtlar:
Aşağıdaki xml'yi Resim Görünümü'nün arka planına Çizilebilir olarak ayarladım. İşe yarıyor.
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF" />
<stroke android:width="1dp" android:color="#000000" />
<padding android:left="1dp" android:top="1dp" android:right="1dp"
android:bottom="1dp" />
</shape>
Sonra eklemek android:background="@drawable/yourXmlFileName"
için sizinImageView
android:background="@drawable/yourXmlFileName"
içinImageView
Aşağıdaki siyah kenarlık için kullanılan kod. Kenarlık için ekstra xml dosyası kullanmadığınızı unutmayın.
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/red_minus_icon"
android:background="#000000"
android:padding="1dp"/>
android:scaleType="centerCrop"
.
scaleType="centerCrop"
eklediğinizden emin oluncropToPadding="true"
Bu eski bir gönderi biliyorum, ama bunun muhtemelen birine yardım edebileceğini düşündüm.
Şeklin "düz" rengiyle çakışmayan yarı saydam bir kenarlığı simüle etmek istiyorsanız, bunu xml'nizde kullanın. Ben her zaman gerçek çizilmiş şekli örtüşüyor gibi "inme" etiketi burada hiç kullanmıyorum unutmayın.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle" >
<solid android:color="#55111111" />
<padding
android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp" />
<corners android:radius="5dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle" >
<padding
android:bottom="5dp"
android:left="5dp"
android:right="5dp"
android:top="5dp" />
<solid android:color="#ff252525" />
</shape>
</item>
</layer-list>
ImageView
xml dosyasında
<ImageView
android:id="@+id/myImage"
android:layout_width="100dp"
android:layout_height="100dp"
android:padding="1dp"
android:scaleType="centerCrop"
android:cropToPadding="true"
android:background="@drawable/border_image"
android:src="@drawable/ic_launcher" />
Aşağıdaki kodun adı ile kaydedin border_image.xml
ve çekilebilir klasörde olmalıdır
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="270"
android:endColor="#ffffff"
android:startColor="#ffffff" />
<corners android:radius="0dp" />
<stroke
android:width="0.7dp"
android:color="#b4b4b4" />
</shape>
görüntünün kenarlığına yuvarlatılmış köşe vermek istiyorsanız border.xml dosyasındaki bir satırı değiştirebilirsiniz
<corners android:radius="4dp" />
Çekilebilir klasörünüzde aşağıdaki içeriğe sahip bir xml dosyası (örn. "Frame_image_view.xml") oluşturun:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="@dimen/borderThickness"
android:color="@color/borderColor" />
<padding
android:bottom="@dimen/borderThickness"
android:left="@dimen/borderThickness"
android:right="@dimen/borderThickness"
android:top="@dimen/borderThickness" />
<corners android:radius="1dp" /> <!-- remove line to get sharp corners -->
</shape>
Değiştirin @dimen/borderThickness
ve @color/borderColor
istediğinizi değiştirin veya karşılık gelen dimen / renk ekleyin.
Drawable'ı arka plan olarak ImageView'inize ekleyin:
<ImageView
android:id="@+id/my_image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/frame_image_view"
android:cropToPadding="true"
android:adjustViewBounds="true"
android:scaleType="fitCenter" />
Kullanmanız gerekir android:cropToPadding="true"
, aksi takdirde tanımlanan dolgulamanın bir etkisi yoktur. Alternatif android:padding="@dimen/borderThickness"
olarak, bunu elde etmek için ImageView'da kullanın. Kenarlık ImageView yerine üst öğeyi çerçeveliyorsa, kullanmayı deneyin android:adjustViewBounds="true"
.
Koddaki kenarlık renginizi değiştirmenin en kolay yolu tintBackgound özniteliğini kullanmaktır.
ImageView img = findViewById(R.id.my_image_view);
img.setBackgroundTintList(ColorStateList.valueOf(Color.RED); // changes border color to red
veya
ImageView img = findViewById(R.id.my_image_view);
img.setBackgroundTintList(getColorStateList(R.color.newColor));
Sizin tanımlamak unutmayın newColor
.
Arka plan ekleyin res / drawables / background.xml gibi çizilebilir:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/white" />
<stroke android:width="1dp" android:color="@android:color/black" />
</shape>
Res / layout / foo.xml dosyasında ImageView arka planını güncelleyin:
...
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="1dp"
android:background="@drawable/background"
android:src="@drawable/bar" />
...
Src'nin arka plan üzerinde çizim yapmasını istiyorsanız ImageView dolgusunu hariç tutun.
Bu yukarıda kullanıldı, ancak sadece belirtilmedi.
setCropToPadding(boolean);
Eğer doğruysa , görüntü onun dolgu sığacak şekilde kırpılır.
Bu, ImageView
kaynağı arka planına eklenen dolguların içine sığdırır.
XML ile aşağıdaki gibi yapılabilir-
android:cropToPadding="true"
bu kodu res / drawable içinde bir background.xml oluşturmanız gerekir
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF" />
<corners android:radius="6dp" />
<stroke
android:width="6dp"
android:color="@android:color/white" />
<padding
android:bottom="6dp"
android:left="6dp"
android:right="6dp"
android:top="6dp" />
</shape>
ImageView özel kenarlığını ve şeklini arayanlar için. Sen kullanabilirsiniz android-şekil-ImageView
Sadece eklemek compile 'com.github.siyamed:android-shape-imageview:0.9.+@aar'
adresinden Müşteri build.gradle
.
Ve düzeninizde kullanın.
<com.github.siyamed.shapeimageview.BubbleImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/neo"
app:siArrowPosition="right"
app:siSquare="true"/>
Neredeyse bundan vazgeçtim.
Bu, görüntüyü yüklemek için kayma kullanarak durumum, yuvarlak köşe dönüşümleri ve burada ayrıntılı kayma sorununa bakın.
Ben de aynı özelliklere sahibim ImageView
, çünkü herkes burada cevap veriyor 1 , burada 2 ve burada 3
android:cropToPadding="true"
android:adjustViewBounds="true"
android:scaleType="fitCenter"`
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/path_to_rounded_drawable"
Ama yine de başarı yok.
Bir süre araştırdıktan sonra foreground
, bu SO cevabındaki nitelikleri kullanarak bir sonuç verinandroid:foreground="@drawable/all_round_border_white"
ne yazık ki bana aşağıdaki görüntü gibi "hoş değil" kenar köşesi veriyor:
Bunu yapmayı çok daha kolay buldum:
1) İçeriği içerecek şekilde çerçeveyi düzenleyin (9 toplu iş aracıyla).
2) ImageView
İçine a yerleştirin Linearlayout
ve istediğiniz çerçeve arka planını veya rengini arka plan olarak ayarlayın Linearlayout
. Çerçeveyi içeriğin içine sahip olacak şekilde ayarladığınızda, çerçevenin içinde ImageView
olacaksınız (tam 9patch aracıyla içeriği ayarladığınız yerde).
Aşağıda bu uzun soruna en basit çözümüm var.
<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 -->
<ImageView
android: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 -->
<ImageView
android:layout_width="110dp"
android:layout_height="110dp"
android:layout_margin="1dp"
android:id="@+id/itemImageThumbnailImgVw"
android:src="@drawable/banana"
android:background="#FFF"/> </FrameLayout>
Aşağıdaki cevapta yeterince açıkladım, lütfen buna da bir göz atın!
Umarım bu başka birine yardımcı olur!
Aynı xml sonraki kullandım:
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ffffff" <!-- border color -->
android:padding="3dp"> <!-- border width -->
<ImageView
android:layout_width="160dp"
android:layout_height="120dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:scaleType="centerCrop" />
</RelativeLayout>