Android'de bir Resim görünümü için sınır?


337

ImageViewAndroid için bir kenarlığı nasıl ayarlayabilir ve rengini nasıl değiştirebilirim?


1
Bir ImageView rengini değiştirmek için bir cevabım var, umut yardımcı olabilir.
13'te ruidge

Yanıtlar:


566

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


112
Ve sonra eklemek android:background="@drawable/yourXmlFileName"içinImageView
Mithun Sreedharan

10
Kenarlık hem sol hem de sağda çalışır, ancak üst ve alt için üst öğeyi üste doldurur.
Maurice

3
Oh güzel, ben de bunu istiyorum. ImageView'ınız için dolgu ayarlamayı unutmayın.
emeraldhieu

5
@Maurice cropToPadding öğesini true olarak ayarlayabilirsiniz.
MikkoP

4
ayarlamayı unutma cropToPadding = "true"
landry

164

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

29
evet .. bir sınıra benziyor. Ancak, şeffaf arka plana sahip bir çekilebilir görüntü kullandığınızda, resminizi kenarlıkla düzgün bir şekilde göstermez. saydam olan her yerde siyah renk gösterir. Yani cevabınız en iyi yaklaşım değil.
Praveen

19
Evet! ancak başka bir xml dosyası oluşturmadan kenarlığınız var.
user609239

7
Görüntüyü kullanarak yeniden boyutlandırdığınızda bu çalışmaz android:scaleType="centerCrop".
Silox

8
bu kötü çünkü gereksiz aşırı çekilme yaratıyor
Jay Soyer

1
@Silox için scaleType="centerCrop"eklediğinizden emin oluncropToPadding="true"
Adam Johns

24

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>

Bunu da seviyorum ama dış kenarları çok küçük yaparsanız, köşeler boştur. Her şey 2dp ve üstü ile iyi çalışır.
John Stack

Bu yöntemin yararı, yuvarlatılmış köşelere izin vermesidir. Önceki yanıtın kenarlığının üst üste binmesini istemiyorsanız, ImageView etiketine dolgu ekleyin. Bu yöntemin dezavantajı, yarı saydam bir arka plan kullanılırsa kenarlığın görüntü alanına akmasıdır. Bu yüzden önceki yöntemi seçiyorum çünkü yarı saydam arka planı yuvarlatılmış köşelerden daha iyi seviyorum.
Leo Landau

24

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.xmlve ç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" />

2
sadece bir not, eğer görüntü dinamik olarak ayarlanmışsa, o zaman sınırın üzerinde başka bir şekilde kodun yeniden ayarlanması gerekir.
Rob85

4

Kenarlık Oluştur

Ç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/borderThicknessve @color/borderColoristediğ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".

Kenarlık Rengini Değiştirme

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.


3

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.


3

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, ImageViewkaynağı arka planına eklenen dolguların içine sığdırır.

XML ile aşağıdaki gibi yapılabilir-

android:cropToPadding="true"

2

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>

2

ImageView özel kenarlığını ve şeklini arayanlar için. Sen kullanabilirsiniz android-şekil-ImageView

görüntü

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

1

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:

resim açıklamasını buraya girin


0

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 Linearlayoutve 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 ImageViewolacaksınız (tam 9patch aracıyla içeriği ayarladığınız yerde).


0

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!


0

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>

0

Önce kenarlığınızın rengi olarak istediğiniz arka plan rengini ekledikten sonra resim açıklamasını buraya girin

cropToPadding öğesini true olarak değiştirin ve ardından dolgu ekleyin.

Sonra imageView için sınırınız olacak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.