ImageView im Rundschreiben durch XML

201

Ich möchte jedes Bild von mir ImageViewkreisförmig mit einem Rand machen.

Ich habe gesucht, aber keine nützlichen Informationen gefunden (alles, was ich versucht habe, hat nicht funktioniert).

Wie kann ich dies durch XML erreichen: Erstellen Sie eine ImageViewmit bestimmten src und machen Sie es kreisförmig mit einem Rand?

user3050910
quelle
Wie ändere ich die src von ImageView in Java-Code?
Chenzhongpu
Gute einfache Lösung hier stackoverflow.com/a/28096369/2162226 - alles in Java, so dass Sie diese Formatierung dynamisch auf Bilder zur Laufzeit anwenden können
Gene Bo
Sie müssen Ihre ImageView in die CardView einfügen, da CardView nur über die Funktion verfügt, auf das Eckradiusattribut zuzugreifen.
Vahag Chakhoyan

Antworten:

221

Sie können einen einfachen Kreis mit weißem Rand und transparentem Inhalt mit Form erstellen.

// res/drawable/circle.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadius="0dp"
    android:shape="ring"
    android:thicknessRatio="1.9"
    android:useLevel="false" >
    <solid android:color="@android:color/transparent" />

    <stroke
        android:width="10dp"
        android:color="@android:color/white" />
</shape>

Machen Sie dann eine Ebenenliste zeichnbar und fügen Sie sie als Hintergrund für Ihre Bildansicht ein.

// res/drawable/img.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:drawable="@drawable/circle"/>    
    <item android:drawable="@drawable/ic_launcher"/>

</layer-list>

und fügen Sie es als Hintergrund für Ihre Bildansicht ein.

   <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/img"/>

Du wirst so etwas haben.

Geben Sie hier die Bildbeschreibung ein

Orhan Obut
quelle
13
Und dann setze ich diese Form auf den Hintergrund meiner Bildansicht? Ich habe das versucht, aber nicht funktioniert. Mein Bild noch rechteckig :(
user3050910
3
Ja, mit XML, da die Verwendung von Java-Code für das Handy sehr teuer ist. Mit diesem Code erscheint nur ein Kreis hinter meinem Bild, nicht das Bild selbst ist ein Kreis. Ich nehme an, es ist für den Rand, ich möchte, dass das Bild in einem Kreis innerhalb dieses Kreises gerundet wird
user3050910
5
Aber immer noch stimmt etwas nicht. Abgesehen davon, dass das Bild den kreisförmigen Rand vor sich hat, ist es außerhalb des Kreises nicht transparent. Ich meine, der Kreis ist da, aber die
Bildecken
79
Wie ändere ich den Quellcode von ImageView in Java-Code, wenn ich diesen Weg übernehme?
Chenzhongpu
3
nutzlose, fest aufgezeichnete img Quelle, möchte ich mit Code ändern
user924
290

Dies ist das einfachste Weg, den ich entworfen habe. Versuche dies.

dependencies: compile 'com.android.support:appcompat-v7:23.1.1'
              compile 'com.android.support:design:23.1.1'
              compile 'com.android.support:cardview-v7:23.1.1'

<android.support.v7.widget.CardView
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:elevation="12dp"
    android:id="@+id/view2"
   app:cardCornerRadius="40dp"
    android:layout_centerHorizontal="true"
    android:innerRadius="0dp"
    android:shape="ring"
    android:thicknessRatio="1.9">
    <ImageView
        android:layout_height="80dp"
        android:layout_width="match_parent"
        android:id="@+id/imageView1"
        android:src="@drawable/YOUR_IMAGE"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true">
    </ImageView>
 </android.support.v7.widget.CardView>

Wenn Sie an Android-Versionen über Lollipop arbeiten

<android.support.v7.widget.CardView
android:layout_width="80dp"
android:layout_height="80dp"
android:elevation="12dp"
android:id="@+id/view2"
app:cardCornerRadius="40dp"
android:layout_centerHorizontal="true">
<ImageView
    android:layout_height="80dp"
    android:layout_width="match_parent"
    android:id="@+id/imageView1"
    android:src="@drawable/YOUR_IMAGE"
    android:scaleType="centerCrop"/>
  </android.support.v7.widget.CardView>

Hinzufügen eines Rahmens zur runden ImageView - NEUESTE VERSION

Wickeln Sie es mit einem anderen CardView ein, das etwas größer als das innere ist, und stellen Sie die Hintergrundfarbe ein, um Ihrem runden Bild einen Rand hinzuzufügen. Sie können die Größe der äußeren CardView erhöhen, um die Dicke des Rahmens zu erhöhen.

<androidx.cardview.widget.CardView
  android:layout_width="155dp"
  android:layout_height="155dp"
  app:cardCornerRadius="250dp"
  app:cardBackgroundColor="@color/white">

    <androidx.cardview.widget.CardView
      android:layout_width="150dp"
      android:layout_height="150dp"
      app:cardCornerRadius="250dp"
      android:layout_gravity="center">

        <ImageView
          android:layout_width="150dp"
          android:layout_height="150dp"
          android:src="@drawable/default_user"
          android:scaleType="centerCrop"/>

   </androidx.cardview.widget.CardView>

 </androidx.cardview.widget.CardView>
Shreedhar Bhat
quelle
1
Danke dafür. Einfach und sparsam im Speicher. Die Bibliotheken, die ich bisher ausprobiert habe, geben alle OOMExceptions, wenn die benutzerdefinierten Ansichten in RecyclerView-Elementen verwendet werden.
COBB
11
Versucht mit diesem, sieht aus wie es nicht mit Android unter 5.0 funktioniert. Obwohl die Bildansicht kreisförmig ist, sind die Bilder mit quadratischer Form kleiner und sehen schrecklich aus. Irgendein Vorschlag? 5.0 und höher funktioniert gut.
Kaps
6
Mein Bild passt nicht zum CardView mit dieser Methode
Hendra Anggrian
21
Dies macht die Kartenansicht abgerundet, aber das Bild ist immer noch quadratisch darunter
kabuto178
5
Vielen Dank, der Schlüssel hier ist, dass der Kartenradius die Hälfte der Breite und Höhe betragen muss, um einen richtigen Kreis zu bilden.
B. Shruti
124

Ich hoffe, dies wird dir helfen.

1) CircleImageView

Geben Sie hier die Bildbeschreibung ein

 <de.hdodenhof.circleimageview.CircleImageView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/profile_image"
    android:layout_width="96dp"
    android:layout_height="96dp"
    android:src="@drawable/profile"
    app:civ_border_width="2dp"
    app:civ_border_color="#FF000000"/>

Vergessen Sie nicht die Implementierung: Gradle Scripts> build.gradle (Modul: App)> Abhängigkeiten

     implementation 'de.hdodenhof:circleimageview:3.1.0'   

Eine vollständige Beschreibung finden Sie hier: Die Quelle hier.

2) CircularImageView

Geben Sie hier die Bildbeschreibung ein

<com.mikhaellopez.circularimageview.CircularImageView
    android:layout_width="250dp"
    android:layout_height="250dp"
    android:src="@drawable/image"
    app:civ_border_color="#3f51b5"
    app:civ_border_width="4dp"
    app:civ_shadow="true"
    app:civ_shadow_radius="10"
    app:civ_shadow_color="#3f51b5"/>

Vergessen Sie nicht die Implementierung: Gradle Scripts> build.gradle (Modul: App)> Abhängigkeiten

     implementation 'com.mikhaellopez:circularimageview:4.2.0'   

Eine vollständige Beschreibung finden Sie hier: Die Quelle hier.

Sanjay Mangaroliya
quelle
1
Wie ändere ich den grauen Farbteil in Weiß?
John Joe
2
Seitdem wurde ein Update veröffentlicht. border_colour und border_width wurden umbenannt. Weitere Informationen finden Sie auf der Github-Seite: github.com/hdodenhof/CircleImageView
rharvey
Unterstützt keinen Skalentyp. :(
Khan
Hallo, es funktioniert gut, wenn mit src eingestellt wird, aber sein Verhalten ist anders, wenn versucht wird, mit Java-Code
einzustellen
@Erum Sie müssen nur die Kompilierung 'de.hdodenhof: circleimageview: 1.3.0' in die Gradle-Datei einfügen und benötigen keinen Java-Code.
Sanjay Mangaroliya
46

Mit Hilfe von glide Bibliothek und RoundedBitmapDrawableFactory Klasse ist es leicht zu erreichen. Möglicherweise müssen Sie ein kreisförmiges Platzhalterbild erstellen.

Glide V4:

Glide.with(context).load(url).apply(RequestOptions.circleCropTransform()).into(imageView);

Glide V3:

    Glide.with(context)
        .load(imgUrl)
        .asBitmap()
        .placeholder(R.drawable.placeholder)
        .error(R.drawable.placeholder)
        .into(new BitmapImageViewTarget(imgProfilePicture) {
            @Override
            protected void setResource(Bitmap resource) {
                RoundedBitmapDrawable drawable = RoundedBitmapDrawableFactory.create(context.getResources(),
                        Bitmap.createScaledBitmap(resource, 50, 50, false));
                drawable.setCircular(true);
                imgProfilePicture.setImageDrawable(drawable);
            }
        });

Für Picasso RoundedTransformation ist dies eine wirklich großartige Lösung, die eine zusätzliche Option zum Runden von Bildern am oberen oder unteren Rand bietet.

Chitrang
quelle
2
Sie sind sich nicht sicher, welche Version von Glide Sie für dieses Beispiel verwenden, aber mit v4.0.0 können Sie einfach deren RequestOptions anstelle von RoundedBitmapDrawable verwenden: Glide.with(context).load(imgUrl).apply(new RequestOptions().centerCrop()) .into(imageView)
Eugene Brusov
2
Meinst du nicht; Glide.with (context) .load (imgUrl) .apply (new RequestOptions (). CircleCrop ()) .into (imageView)?
Androidz
3
Mit Version 4.6.1 verwenden.apply(RequestOptions.circleCropTransform())
Pavel
2
In Glide v.4, wenn GlideAppin einer Anwendung konfiguriert : GlideApp.with(this).load(url).circleCrop().into(imageView);.
CoolMind
1
Ich kann nicht glauben, dass es ohne Kopfschmerzen so einfach funktioniert hat
Ajeeli
30

Die oben genannten Methoden scheinen nicht zu funktionieren, wenn Sie das srcAttribut verwenden. Was ich getan habe, ist, zwei Bildansichten in einem Rahmenlayout wie folgt übereinander zu platzieren:

<FrameLayout android:id="@+id/frame"
             android:layout_width="40dp"
             android:layout_height="40dp">

    <ImageView android:id="@+id/pic"
               android:layout_width="40dp"
               android:layout_height="40dp"
               android:src="@drawable/my_picture" />

    <ImageView android:id="@+id/circle_crop"
               android:layout_width="40dp"
               android:layout_height="40dp"
               android:src="@drawable/circle_crop" />

</FrameLayout>

Legen Sie einfach eine Circular_Crop.png in Ihren Zeichenordner, die die Form Ihrer Bildabmessungen (in meinem Fall ein Quadrat) mit einem weißen Hintergrund und einem transparenten Kreis in der Mitte hat. Sie können dieses Bild verwenden, wenn Sie eine quadratische Bildansicht wünschen.

Rundes Bild

Laden Sie einfach das Bild oben herunter.

Jyotman Singh
quelle
2
beste Lösung! beste Leistung. Ändern Sie die Bitmap ist Speicherproblem
Itzhar
Dieses Beispielbild ist weiß, also ja. Sie können jedoch Ihr eigenes Bild in einer beliebigen Farbe erstellen oder dieses Bild herunterladen und einfach seine Farbe ändern.
Jyotman Singh
Können Sie bitte erklären, wie ich die Farbe des Bildes in Schwarz ändere? Kann es in Android Studio gemacht werden oder brauche ich ein externes Tool (man kann sehen, dass ich mit der Bilderstellung nicht vertraut bin)
Zvi
Nein, nicht aus Android Studio. Sie benötigen so etwas wie Photoshop. Dieses Foto selbst wurde auch mit Photoshop erstellt
Jyotman Singh
1
Sie können dem zeichnbaren Kreis einfach einen Farbfilter geben: circleCrop.setColorFilter (getResources (). GetColor (R.color.white)). Auf diese Weise können Sie einen einzelnen Kreis in einer beliebigen Farbe zeichnen und an einer beliebigen Stelle in Ihrer App auf einem beliebigen Hintergrund wiederverwenden. Stellen Sie einfach jedes Mal einen Farbfilter mit der entsprechenden Farbressource ein.
mjp66
19

Das Folgende ist eine der einfachsten Möglichkeiten, verwenden Sie den folgenden Code:

Abhängigkeiten

dependencies {
    ...
    compile 'de.hdodenhof:circleimageview:2.1.0'      // use this or use the latest compile version. In case u get bug.
}

XML-Code

<de.hdodenhof.circleimageview.CircleImageView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/profile_image"
    android:layout_width="96dp"             //  here u can adjust the width 
    android:layout_height="96dp"            //  here u can adjust the height 
    android:src="@drawable/profile"         //  here u can change the image 
    app:civ_border_width="2dp"              //  here u can adjust the border of the circle.  
    app:civ_border_color="#FF000000"/>      //  here u can adjust the border color

Bildschirmfoto:

Bildschirmfoto

Quelle: Circular ImageView GitHub Repository

Geben Sie hier die Bildbeschreibung ein

Bugs Buggy
quelle
6
Unterstützt keinen Skalentyp. :(
Khan
6

Dies wird den Trick tun:

rechteck.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@android:color/transparent" />
    <padding android:bottom="-14dp" android:left="-14dp" android:right="-14dp" android:top="-14dp" />

</shape>

circle.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadius="0dp"
    android:shape="oval"

    android:useLevel="false" >
    <solid android:color="@android:color/transparent" />

    <stroke
        android:width="15dp"
        android:color="@color/verification_contact_background" />

</shape>

profile_image.xml (Die Ebenenliste)

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:drawable="@drawable/rectangle" />
    <item android:drawable="@drawable/circle"/>

</layer-list>

Ihr Layout

 <ImageView
        android:id="@+id/profile_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/default_org"
        android:src="@drawable/profile_image"/>
Nidhi
quelle
Was ist default_org?
John Joe
Dies kann jedes Platzhalterbild sein
Nidhi
In diesem Fall überschreiten die Kanten eines Bildes in rechteckiger Dimension die Grenzen des Kreises. Wie kann ich jedes Bild in jeder Dimension und Form genau innerhalb des Kreises positionieren?
inverted_index
6

Verwenden Sie einfach die ShapeableImageViewvon der Material Components Library bereitgestellten.
Etwas wie:

<com.google.android.material.imageview.ShapeableImageView
    app:shapeAppearanceOverlay="@style/roundedImageViewRounded"
    app:strokeColor="@color/....."
    app:strokeWidth="1dp"
    ...
    />

mit:

  <style name="roundedImageViewRounded">
    <item name="cornerFamily">rounded</item>
    <item name="cornerSize">50%</item>
  </style>

Geben Sie hier die Bildbeschreibung ein

Hinweis: Es ist mindestens die Version erforderlich 1.2.0-alpha03.

Gabriele Mariotti
quelle
5

Sie können CardView einfach ohne externe Bibliothek verwenden

  <androidx.cardview.widget.CardView
                    android:id="@+id/roundCardView"
                    android:layout_width="40dp"
                    android:layout_height="40dp"
                    android:layout_centerHorizontal="true"
                    android:elevation="0dp"
                    app:cardCornerRadius="20dp">

                    <ImageView
                        android:layout_width="40dp"
                        android:layout_height="40dp"
                        android:src="@drawable/profile" />
</androidx.cardview.widget.CardView>
Abdurahman Popal
quelle
4

Ich benutze shape = "oval" anstelle des "Rings" unten. Es hat bei mir funktioniert. Um das Bild in Grenzen zu halten, verwende ich <padding>und setze <adjustViewBounds>es in meinem auf true <ImageView>. Ich habe es mit Bildern mit einer Größe zwischen 50 x 50 px und 200 x 200 px versucht.

Subramanya Sheshadri
quelle
Sie können auch Folgendes hinzufügenandroid:scaleType="fitCenter"
ihayet
2

@Jyotman Singh, die Antwort ist sehr gut (für solide Hintergründe), daher möchte ich sie verbessern, indem ich Vektorzeichnungen teile, die für Ihre Bedürfnisse neu eingefärbt werden können. Dies ist auch praktisch, da die einteilige Vektorform gut skalierbar ist.

Dies ist die Rechteck-Kreis-Form (@ drawable / shape_round_profile_pic):

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:viewportWidth="284"
    android:viewportHeight="284"
    android:width="284dp"
    android:height="284dp">
    <path
        android:pathData="M0 142L0 0l142 0 142 0 0 142 0 142 -142 0 -142 0zm165 137.34231c26.06742 -4.1212 52.67405 -17.543 72.66855 -36.65787 11.82805 -11.30768 20.55487 -22.85153 27.7633 -36.72531C290.23789 158.21592 285.62874 101.14121 253.48951 58.078079 217.58149 9.9651706 154.68849 -10.125717 98.348685 8.5190299 48.695824 24.95084 12.527764 67.047123 3.437787 118.98655 1.4806194 130.16966 1.511302 152.96723 3.4990422 164.5 12.168375 214.79902 47.646316 256.70775 96 273.76783c21.72002 7.66322 44.26673 9.48476 69 5.57448z"
        android:fillColor="#ffffff" /> // you can change frame color
</vector>

Die Verwendung ist die gleiche:

<FrameLayout
        android:layout_width="70dp"
        android:layout_height="70dp">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/YOUR_PICTURE" />

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/shape_round_profile_pic"/>

    </FrameLayout>
ekar
quelle
Und wie soll das gehen? Sie zeigen einfach einen Kreis über dem Bild an, während Sie tatsächlich gefragt werden, wie das Bild zugeschnitten werden soll, damit es wie ein Kreis aussieht.
Fattum
Bitte lesen Sie die Antwort von @Jyotman Singh oben. Es war hilfreich für mich, also habe ich es ein bisschen verbessert. Zum Zuschneiden von GlideApp.with(getApplicationContext()).asBitmap().load(profilePhotoUrl) .circleCrop()
Bildern können
Vielen Dank für die Kreis-in-einem-Rechteck-Form! Genau das, was ich brauchte!
siralexsir88
2

Verwenden Sie einfach diese Codezeilen und Sie sind fertig:

<de.hdodenhof.circleimageview.CircleImageView
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:clickable="true"
            app:civ_border_width="3dp"
            app:civ_border_color="#FFFFFFFF"
            android:id="@+id/profile"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:layout_below="@+id/header_cover_image"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="-130dp"
            android:elevation="5dp"
            android:padding="20dp"
            android:scaleType="centerCrop"
            android:src="@drawable/profilemain" />

Geben Sie hier die Bildbeschreibung ein

Vergessen Sie nicht zu importieren:

import de.hdodenhof.circleimageview.CircleImageView;

Fügen Sie diese Bibliothek in build.gradle hinzu:

compile 'de.hdodenhof:circleimageview:2.1.0'
Hanisha
quelle
Sie müssen etwas in der Java-Klasse vermissen
John Joe
1

Versuche dies.

public class RoundedImageView extends android.support.v7.widget.AppCompatImageView {

    private int borderWidth = 4;
    private int viewWidth;
    private int viewHeight;
    private Bitmap image;
    private Paint paint;
    private Paint paintBorder;
    private BitmapShader shader;

    public RoundedImageView(Context context)
    {
        super(context);
        setup();
    }

    public RoundedImageView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        setup();
    }

    public RoundedImageView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        setup();
    }

    private void setup()
    {
        paint = new Paint();
        paint.setAntiAlias(true);

        paintBorder = new Paint();
        setBorderColor(Color.WHITE);
        paintBorder.setAntiAlias(true);
        this.setLayerType(LAYER_TYPE_SOFTWARE, paintBorder);

        paintBorder.setShadowLayer(4.0f, 0.0f, 2.0f, Color.WHITE);
    }

    public void setBorderWidth(int borderWidth)
    {
        this.borderWidth = borderWidth;
        this.invalidate();
    }

    public void setBorderColor(int borderColor)
    {
        if (paintBorder != null)
            paintBorder.setColor(borderColor);

        this.invalidate();
    }

    private void loadBitmap()
    {
        BitmapDrawable bitmapDrawable = (BitmapDrawable) this.getDrawable();

        if (bitmapDrawable != null)
            image = bitmapDrawable.getBitmap();
    }

    @SuppressLint("DrawAllocation")
    @Override
    public void onDraw(Canvas canvas)
    {
        loadBitmap();

        if (image != null)
        {
            shader = new BitmapShader(Bitmap.createScaledBitmap(image, canvas.getWidth(), canvas.getHeight(), false), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
            paint.setShader(shader);
            int circleCenter = viewWidth / 2;
            canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter + borderWidth - 4.0f, paintBorder);
            canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter - 4.0f, paint);
        }
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        int width = measureWidth(widthMeasureSpec);
        int height = measureHeight(heightMeasureSpec, widthMeasureSpec);

        viewWidth = width - (borderWidth * 2);
        viewHeight = height - (borderWidth * 2);

        setMeasuredDimension(width, height);
    }

    private int measureWidth(int measureSpec)
    {
        int result = 0;
        int specMode = MeasureSpec.getMode(measureSpec);
        int specSize = MeasureSpec.getSize(measureSpec);

        if (specMode == MeasureSpec.EXACTLY)
        {
            result = specSize;
        }
        else
        {
            // Measure the text
            result = viewWidth;
        }

        return result;
    }

    private int measureHeight(int measureSpecHeight, int measureSpecWidth)
    {
        int result = 0;
        int specMode = MeasureSpec.getMode(measureSpecHeight);
        int specSize = MeasureSpec.getSize(measureSpecHeight);

        if (specMode == MeasureSpec.EXACTLY)
        {
            result = specSize;
        }
        else
        {
            result = viewHeight;
        }

        return (result + 2);
     }
 }

und verwenden Sie diese ImageView im Layout wie folgt:

<com.app.Demo.RoundedImageView
     android:id="@+id/iv_profileImage"
     android:layout_width="70dp"
     android:layout_height="70dp"
     android:layout_centerHorizontal="true"
    />
NipunPerfect
quelle
1

Wenn Sie Material Design in Ihrer App verwenden, verwenden Sie dieses

<com.google.android.material.card.MaterialCardView
            android:layout_width="75dp"
            android:layout_height="75dp"
            app:cardCornerRadius="50dp"
            app:strokeWidth="1dp"
            app:strokeColor="@color/black">
            <ImageView
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/circular_image"
                android:scaleType="fitCenter"
                android:src="@drawable/your_img" />
        </com.google.android.material.card.MaterialCardView>
Izhan Ali
quelle
0

Diese Klasse ist eine benutzerdefinierte kreisförmige Bildansicht mit Schatten, Strich, Sättigung. Mit dieser benutzerdefinierten kreisförmigen Bildansicht können Sie Ihr Bild in kreisförmiger Form mit Radius erstellen. Jungs für Circular Shadow ImageView Keine Notwendigkeit Github diese Klasse ist genug.

Hinzufügen von CircularImageView zu Ihrem Layout

CircularImageView c=new CircularImageView(this,screen width,screen height,Bitmap myimage);
yourLayout.addView(c);**


public class CircularImageView extends android.support.v7.widget.AppCompatImageView  
{
    private final Context context;
    private final int width, height;
    private final Paint paint;
    private final Paint paintBorder,imagePaint;
    private final Bitmap bitmap2;
    private final Paint paint3;
    private Bitmap bitmap;
    private BitmapShader shader;
    private float radius = 4.0f;
    float x = 0.0f;
    float y = 8.0f;
    private float stroke;
    private float strokeWidth = 0.0f;
    private Bitmap bitmap3;
    private int corner_radius=50;


    public CircularImageView(Context context, int width, int height, Bitmap bitmap)     {
        super(context);
        this.context = context;
        this.width = width;
        this.height = height;

   //here "bitmap" is the square shape(width* width) scaled bitmap ..

        this.bitmap = bitmap;


        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setAntiAlias(true);
        paint.setFilterBitmap(true);
        paint.setDither(true);


        paint3=new Paint();
        paint3.setStyle(Paint.Style.STROKE);
        paint3.setColor(Color.WHITE);
        paint3.setAntiAlias(true);

        paintBorder = new Paint();
        imagePaint= new Paint();

        paintBorder.setColor(Color.WHITE);
        paintBorder.setAntiAlias(true);
        this.setLayerType(LAYER_TYPE_SOFTWARE, paintBorder);


        this.bitmap2 = Bitmap.createScaledBitmap(bitmap, (bitmap.getWidth() - 40), (bitmap.getHeight() - 40), true);


        imagePaint.setAntiAlias(true);




        invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) 
    {
        super.onDraw(canvas);
        Shader b;
         if (bitmap3 != null)
            b = new BitmapShader(bitmap3, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
         else
            b = new BitmapShader(bitmap2, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
        imagePaint.setShader(b);
        canvas.drawBitmap(maskedBitmap(), 20, 20, null);
    }

    private Bitmap maskedBitmap()
    {
        Bitmap l1 = Bitmap.createBitmap(width,width, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(l1);
        paintBorder.setShadowLayer(radius, x, y, Color.parseColor("#454645"));
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        final RectF rect = new RectF();
        rect.set(20, 20, bitmap2.getWidth(), bitmap2.getHeight());

        canvas.drawRoundRect(rect, corner_radius, corner_radius, paintBorder);

        canvas.drawRoundRect(rect, corner_radius, corner_radius, imagePaint);

        if (strokeWidth!=0.0f)
        {
            paint3.setStrokeWidth(strokeWidth);
            canvas.drawRoundRect(rect, corner_radius, corner_radius, paint3);
        }

         paint.setXfermode(null);
        return l1;
    }




     // use seekbar here, here you have to pass  "0 -- 250"  here corner radius will change 

    public void setCornerRadius(int corner_radius)
    {
        this.corner_radius = corner_radius;
        invalidate();
    }



    -------->use seekbar here, here you have to pass  "0 -- 10.0f"  here shadow radius will change 

    public void setShadow(float radius)
    {
        this.radius = radius;
        invalidate();
    }

   // use seekbar here, here you have to pass  "0 -- 10.0f"  here stroke size  will change 

    public void setStroke(float stroke)
    {
        this.strokeWidth = stroke;
        invalidate();
    }

    private Bitmap updateSat(Bitmap src, float settingSat)
    {

        int w = src.getWidth();
        int h = src.getHeight();

        Bitmap bitmapResult =
                Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        Canvas canvasResult = new Canvas(bitmapResult);
        Paint paint = new Paint();
        ColorMatrix colorMatrix = new ColorMatrix();
        colorMatrix.setSaturation(settingSat);
        ColorMatrixColorFilter filter = new ColorMatrixColorFilter(colorMatrix);
        paint.setColorFilter(filter);
        canvasResult.drawBitmap(src, 0, 0, paint);

        return bitmapResult;
    }




  // use seekbar here, here you have to pass  "0 -- 2.0f"  here saturation  will change 

    public void setSaturation(float sat)
    {
        System.out.println("qqqqqqqqqq            "+sat);
        bitmap3=updateSat(bitmap2, sat);

        invalidate();
    } 


}






        // Seekbar to change radius

                  radius_seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                        @Override
                        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
                        {
                            text_radius.setText(""+progress);
                            circularImageView.setCornerRadius(progress);
                        }

                        @Override
                        public void onStartTrackingTouch(SeekBar seekBar) {

                        }

                        @Override
                        public void onStopTrackingTouch(SeekBar seekBar) {

                        }
                    });


     // Seekbar to change shadow

                    shadow_seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                        @Override
                        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
                        {
                            float f= 4+progress/10.0f;
                            text_shadow.setText(""+progress);
                            circularImageView.setShadow(f);
                        }

                        @Override
                        public void onStartTrackingTouch(SeekBar seekBar) {

                        }

                        @Override
                        public void onStopTrackingTouch(SeekBar seekBar) {

                        }
                    });


           // Seekbar to change saturation

                    saturation_seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                        @Override
                        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
                        {
                            int progressSat = saturation_seekbar.getProgress();
                            float sat = (float) ((progressSat*4 / 100.0f)-1.0f);
                            circularImageView.setSaturation(sat);

                            text_saturation.setText(""+progressSat);
                        }

                        @Override
                        public void onStartTrackingTouch(SeekBar seekBar) {

                        }

                        @Override
                        public void onStopTrackingTouch(SeekBar seekBar) {

                        }
                    });


    // Seekbar to change stroke

                    stroke_seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                        @Override
                        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
                        {
                            if (progress==0)
                            {
                                float f=(progress*10.0f/100.0f);
                                circularImageView.setStroke(f);
                            }
                            else
                            {
                                float f=(progress*10.0f/100.0f);
                                circularImageView.setStroke(f);
                            }

                            text_stroke.setText(""+progress);
                        }

                        @Override
                        public void onStartTrackingTouch(SeekBar seekBar) {

                        }

                        @Override
                        public void onStopTrackingTouch(SeekBar seekBar) {

                        }
                    });




             //radius seekbar in xml file

             <SeekBar
                android:layout_width="match_parent"
                android:layout_gravity="center" 
                android:progress="50"
                android:max="250"
                android:id="@+id/radius_seekbar"
                android:layout_height="wrap_content" />





          //saturation seekbar in xml file

             <SeekBar
                android:layout_width="match_parent"
                android:layout_gravity="center" 
                android:progress="50"
                android:max="100"
                android:id="@+id/saturation_seekbar"
                android:layout_height="wrap_content" />





    //shadow seekbar in xml file

             <SeekBar
                android:layout_width="match_parent"
                android:layout_gravity="center" 
                android:progress="0"
                android:max="100"
                android:id="@+id/shadow_seekbar"
                android:layout_height="wrap_content" />




         //stroke seekbar in xml file

             <SeekBar
                android:layout_width="match_parent"
                android:layout_gravity="center" 
                android:progress="0"
                android:max="100"
                android:id="@+id/stroke _seekbar"
                android:layout_height="wrap_content" />
Dileep Krishna
quelle
0

Tatsächlich können Sie das, was Google bereitstellt, über die RoundedBitmapDrawableFactory-Klasse der Support-Bibliothek ( hier und hier) verwenden ) , verwenden, anstatt eine Bibliothek eines Drittanbieters zu verwenden:

Gradle:

implementation 'androidx.appcompat:appcompat:1.0.0-beta01'

MainActivity.kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val originalDrawable = ContextCompat.getDrawable(this, R.drawable.avatar_1)!!
        val bitmap = convertDrawableToBitmap(originalDrawable)
        val drawable = RoundedBitmapDrawableFactory.create(resources, bitmap)
        drawable.setAntiAlias(true)
        drawable.cornerRadius = Math.max(bitmap.width, bitmap.height) / 2.0f
        avatarImageView.setImageDrawable(drawable)
    }

    companion object {
        @JvmStatic
        fun convertDrawableToBitmap(drawable: Drawable): Bitmap {
            if (drawable is BitmapDrawable)
                return drawable.bitmap
            // We ask for the bounds if they have been set as they would be most
            // correct, then we check we are  > 0
            val bounds = drawable.bounds
            val width = if (!bounds.isEmpty) bounds.width() else drawable.intrinsicWidth
            val height = if (!bounds.isEmpty) bounds.height() else drawable.intrinsicHeight
            // Now we check we are > 0
            val bitmap = Bitmap.createBitmap(if (width <= 0) 1 else width, if (height <= 0) 1 else height,
                    Bitmap.Config.ARGB_8888)
            val canvas = Canvas(bitmap)
            drawable.setBounds(0, 0, canvas.width, canvas.height)
            drawable.draw(canvas)
            return bitmap
        }
    }
}

res / layout / activity_main.xml

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context=".MainActivity">

    <androidx.appcompat.widget.AppCompatImageView
        android:id="@+id/avatarImageView" android:layout_width="100dp" android:layout_height="100dp"
        android:layout_gravity="center"/>

</FrameLayout>

res / drawable / avatar_1.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="128dp" android:height="128dp"
        android:viewportHeight="128.0" android:viewportWidth="128.0">
    <path
        android:fillColor="#FF8A80" android:pathData="M0 0h128v128h-128z"/>
    <path
        android:fillColor="#FFE0B2"
        android:pathData="M36.3 94.8c6.4 7.3 16.2 12.1 27.3 12.4 10.7,-.3 20.3,-4.7 26.7,-11.6l.2.1c-17,-13.3,-12.9,-23.4,-8.5,-28.6 1.3,-1.2 2.8,-2.5 4.4,-3.9l13.1,-11c1.5,-1.2 2.6,-3 2.9,-5.1.6,-4.4,-2.5,-8.4,-6.9,-9.1,-1.5,-.2,-3 0,-4.3.6,-.3,-1.3,-.4,-2.7,-1.6,-3.5,-1.4,-.9,-2.8,-1.7,-4.2,-2.5,-7.1,-3.9,-14.9,-6.6,-23,-7.9,-5.4,-.9,-11,-1.2,-16.1.7,-3.3 1.2,-6.1 3.2,-8.7 5.6,-1.3 1.2,-2.5 2.4,-3.7 3.7l-1.8 1.9c-.3.3,-.5.6,-.8.8,-.1.1,-.2 0,-.4.2.1.2.1.5.1.6,-1,-.3,-2.1,-.4,-3.2,-.2,-4.4.6,-7.5 4.7,-6.9 9.1.3 2.1 1.3 3.8 2.8 5.1l11 9.3c1.8 1.5 3.3 3.8 4.6 5.7 1.5 2.3 2.8 4.9 3.5 7.6 1.7 6.8,-.8 13.4,-5.4 18.4,-.5.6,-1.1 1,-1.4 1.7,-.2.6,-.4 1.3,-.6 2,-.4 1.5,-.5 3.1,-.3 4.6.4 3.1 1.8 6.1 4.1 8.2 3.3 3 8 4 12.4 4.5 5.2.6 10.5.7 15.7.2 4.5,-.4 9.1,-1.2 13,-3.4 5.6,-3.1 9.6,-8.9 10.5,-15.2m-14.4,-49.8c.9 0 1.6.7 1.6 1.6 0 .9,-.7 1.6,-1.6 1.6,-.9 0,-1.6,-.7,-1.6,-1.6,-.1,-.9.7,-1.6 1.6,-1.6zm-25.7 0c.9 0 1.6.7 1.6 1.6 0 .9,-.7 1.6,-1.6 1.6,-.9 0,-1.6,-.7,-1.6,-1.6,-.1,-.9.7,-1.6 1.6,-1.6z"/>
    <path
        android:fillColor="#E0F7FA"
        android:pathData="M105.3 106.1c-.9,-1.3,-1.3,-1.9,-1.3,-1.9l-.2,-.3c-.6,-.9,-1.2,-1.7,-1.9,-2.4,-3.2,-3.5,-7.3,-5.4,-11.4,-5.7 0 0 .1 0 .1.1l-.2,-.1c-6.4 6.9,-16 11.3,-26.7 11.6,-11.2,-.3,-21.1,-5.1,-27.5,-12.6,-.1.2,-.2.4,-.2.5,-3.1.9,-6 2.7,-8.4 5.4l-.2.2s-.5.6,-1.5 1.7c-.9 1.1,-2.2 2.6,-3.7 4.5,-3.1 3.9,-7.2 9.5,-11.7 16.6,-.9 1.4,-1.7 2.8,-2.6 4.3h109.6c-3.4,-7.1,-6.5,-12.8,-8.9,-16.9,-1.5,-2.2,-2.6,-3.8,-3.3,-5z"/>
    <path
        android:fillColor="#444" android:pathData="M76.3,47.5 m-2.0, 0 a 2.0,2.0 0 1,1 4.0,0 a2.0,2.0 0 1,1 -4.0,0"/>
    <path
        android:fillColor="#444" android:pathData="M50.7,47.6 m-2.0, 0 a 2.0,2.0 0 1,1 4.0,0 a2.0,2.0 0 1,1 -4.0,0"/>
    <path
        android:fillColor="#444"
        android:pathData="M48.1 27.4c4.5 5.9 15.5 12.1 42.4 8.4,-2.2,-6.9,-6.8,-12.6,-12.6,-16.4 17.2 1.5 14.1,-9.4 14.1,-9.4,-1.4 5.5,-11.1 4.4,-11.1 4.4h-18.8c-1.7,-.1,-3.4 0,-5.2.3,-12.8 1.8,-22.6 11.1,-25.7 22.9 10.6,-1.9 15.3,-7.6 16.9,-10.2z"/>
</vector>

Das Ergebnis:

Geben Sie hier die Bildbeschreibung ein

Angenommen, Sie möchten einen Rahmen darüber hinzufügen, können Sie dies beispielsweise verwenden:

strok_drawable.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <stroke
        android:width="4dp" android:color="@android:color/black"/>
</shape>

Und fügen Sie android:foreground="@drawable/stroke_drawable"auf die Image in der Layout - XML - Datei, und Sie erhalten diese:

Geben Sie hier die Bildbeschreibung ein

Ich bin mir jedoch nicht sicher, wie ich Schatten hinzufügen soll (das funktioniert bei älteren Android-Versionen). Mit FloatingActionButton (aus der Abhängigkeit "com.google.android.material: material" ) konnte ich die Bitmap nicht dazu bringen, das FAB selbst zu füllen. Die Verwendung könnte sogar noch besser sein, wenn es funktioniert.


BEARBEITEN: Wenn Sie einen Höhenschatten hinzufügen möchten (verfügbar ab API 21), können Sie ein wenig ändern, was ich geschrieben habe:

In der Layout-XML-Datei:

<androidx.appcompat.widget.AppCompatImageView android:padding="4dp"
    android:id="@+id/avatarImageView" android:layout_width="100dp" android:layout_height="100dp" android:elevation="8dp"
    android:layout_gravity="center" android:background="@drawable/stroke_drawable" tools:srcCompat="@drawable/avatar_1"/>

CircularShadowViewOutlineProvider.kt

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
class CircularShadowViewOutlineProvider : ViewOutlineProvider() {
    override fun getOutline(view: View, outline: Outline) {
        val size = Math.max(view.width, view.height)
        outline.setRoundRect(0, 0, size, size, size / 2f)
    }
}

In Code:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
        avatarImageView.outlineProvider = CircularShadowViewOutlineProvider()

Ergebnis:

Geben Sie hier die Bildbeschreibung ein

Android-Entwickler
quelle
0

Ich habe eine einfache Lösung. Erstellen Sie ein neues Image-Asset, indem Sie mit der rechten Maustaste auf Ihren Paketnamen klicken und Neu-> Image-Asset auswählen. Geben Sie den Namen (einen beliebigen Namen) und den Pfad (Speicherort des Bildes in Ihrem System) ein. Klicken Sie dann auf Weiter und Fertig stellen. Wenn Sie den Namen des Bildes als 'img' eingeben, wird automatisch ein rundes Bild mit dem Namen 'img_round' im Ordner mipmap erstellt.

Dann mach das:

<ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@mipmap/img_round"/>

Ihre Vorschau zeigt möglicherweise immer noch ein rechteckiges Bild. Wenn Sie die App jedoch auf Ihrem Gerät ausführen, ist sie rund.

Vishnu Priyaa
quelle
0

Erstellen Sie eine CustomImageview und überschreiben Sie einfach die onDraw()folgende Methode:

@Override
protected void onDraw(Canvas canvas) {

    float radius = this.getHeight()/2;
    Path path = new Path();
    RectF rect = new RectF(0, 0, this.getWidth(), this.getHeight());
    path.addRoundRect(rect, radius, radius, Path.Direction.CW);
    canvas.clipPath(path);
    super.onDraw(canvas);

}

Falls Sie den Code auch für das benutzerdefinierte Widget möchten: -

CircularImageView.java

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;

import androidx.annotation.Nullable;

public class CircularImageView extends ImageView {

    private Drawable image;

    public CircularImageView(Context context) {
        super(context);

        init(null, 0);
    }

    public CircularImageView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);

        init(attrs, 0);
    }

    public CircularImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        init(attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {

        float radius = this.getHeight()/2;
        Path path = new Path();
        RectF rect = new RectF(0, 0, this.getWidth(), this.getHeight());
        path.addRoundRect(rect, radius, radius, Path.Direction.CW);
        canvas.clipPath(path);
        super.onDraw(canvas);

    }

    private void init(AttributeSet attrs, int defStyle) {
        TypedArray a = Utils.CONTEXT.getTheme().obtainStyledAttributes(attrs, R.styleable.CircularImageView, 0, 0);
        try {
            image = a.getDrawable(R.styleable.CircularImageView_src);
        } finally {
            a.recycle();
        }

        this.setImageDrawable(image);
    }
}

Fügen Sie Ihrer res / attrs.xml außerdem den folgenden Code hinzu , um das erforderliche Attribut zu erstellen: -

<declare-styleable name="CircularImageView">
        <attr name="src" format="reference" />
</declare-styleable>
Mahdi Astanei
quelle
Dies funktioniert, wenn die Bildansicht keinen Hintergrund hat. Was ist dann zu tun?
Supradip.M
0
if you want to set edit icon on to circle imageview than put this below code.

 <FrameLayout
                android:layout_width="@dimen/_100sdp"
                android:layout_height="@dimen/_100sdp"
                android:layout_gravity="center"
                android:layout_marginTop="10dp">

                <de.hdodenhof.circleimageview.CircleImageView
                    android:id="@+id/profilePic"
                    android:layout_width="@dimen/_100sdp"
                    android:layout_height="@dimen/_100sdp"
                    android:layout_gravity="bottom|center_horizontal"
                    android:src="@drawable/ic_upload" />

                <de.hdodenhof.circleimageview.CircleImageView
                    android:id="@+id/iv_camera"
                    android:layout_width="@dimen/_30sdp"
                    android:layout_height="@dimen/_30sdp"
                    android:layout_gravity="top|right"
                    android:src="@drawable/edit"/>
            </FrameLayout>
MEGHA DOBARIYA
quelle
0

Wenn Sie das Bild lieber so schneiden möchten, dass es kreisförmig angezeigt wird, können Sie loslegen

public static Bitmap getCircularBitmap(Bitmap bitmap) {
        Bitmap output;

        if (bitmap.getWidth() > bitmap.getHeight()) {
            output = Bitmap.createBitmap(bitmap.getHeight(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
        } else {
            output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getWidth(), Bitmap.Config.ARGB_8888);
        }

        Canvas canvas = new Canvas(output);

        final int color = 0xff424242;
        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());

        float r = 0;

        if (bitmap.getWidth() > bitmap.getHeight()) {
            r = bitmap.getHeight() / 2;
        } else {
            r = bitmap.getWidth() / 2;
        }

        paint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(color);
        canvas.drawCircle(r, r, r, paint);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);
        return output;
    }
Nasib
quelle
-1

Wie in Orhan Obuts Antwort beschrieben, aber mit den Änderungen:

<ImageView
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:src="@drawable/img"
    android:layout_weight="75" />

um Bildstrecken zu vermeiden. Und img.xml:

<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/profile" />
<item android:drawable="@drawable/circle" /></layer-list>

(ohne Änderungen) und circle.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:innerRadiusRatio="2"
android:shape="ring"
android:thickness="300dp"
android:useLevel="false">
<solid android:color="@android:color/white"/>
<stroke
    android:width="2dp"
    android:color="@android:color/black"/>
</shape>
 

hier wird die Dicke des Rings maximal - 1000 dp
und radiusRatio ist die Hälfte der Bildbreite (maximale Ringbreite, ja?) - 2
und der Strich ist für den erforderlichen Rand, falls erforderlich.
Ich habe übrigens ein quadratisches PNG-Bild (profile.png) verwendet. Bei gleicher Breite und Höhe. Dies ist für beliebige ImageView-Dimensionen korrekt. Geben Sie hier die Bildbeschreibung ein

CodeToLife
quelle
-1

Verwenden Sie einfach diesen einfachen Code: Fügen Sie zuerst die Abhängigkeit hinzu:

implementation 'de.hdodenhof:circleimageview:2.2.0'

Fügen Sie dann im XML-Layout den folgenden Code hinzu: -

<de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto"
                                        android:id="@+id/Imgshaligram"
                                        android:layout_width="96dp"
                                        android:layout_height="96dp"
                                        android:src="@drawable/shaligram"
                                        app:civ_border_color="#d1b1b1"

                                        android:foregroundGravity="center"/>
Pradeep Sheoran
quelle
-1

Auch diese beiden Bibliotheken können Ihnen helfen.

https://github.com/vinc3m1/RoundedImageView

Implementieren Sie den folgenden Code:

implementation 'com.makeramen:roundedimageview:2.3.0'

Einfache Verwendung:

<com.makeramen.roundedimageview.RoundedImageView
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/imageView1"
        android:src="@drawable/photo1"
        android:scaleType="fitCenter"
        app:riv_corner_radius="30dip"
        app:riv_border_width="2dip"
        app:riv_border_color="#333333"
        app:riv_mutate_background="true"
        app:riv_tile_mode="repeat"
        app:riv_oval="true" />

https://github.com/chirag-kachhadiya/RoundedImageView

Einfache Verwendung:

Implementieren Sie den folgenden Code:

implementation 'com.github.chirag-kachhadiya:RoundedImageView:1.0'



 <com.infinityandroid.roundedimageview.RoundedImageView
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:adjustViewBounds="true"
                android:src="@drawable/the_hundred"
                app:corner_radius="10" />
Alirezaaraby
quelle