web-dev-qa-db-fra.com

Faire une image circulaire avec une bordure circulaire blanche

Comment faire une image circulaire et lui donner une bordure circulaire blanche? Est-il nécessaire d'utiliser deux vues d'image, une pour l'image et l'autre pour la bordure blanche? Y a-t-un autre moyen de faire ça?

10
user2875895

Essaye ça...

public static Bitmap getCircularBitmapWithWhiteBorder(Bitmap bitmap,
        int borderWidth) {
    if (bitmap == null || bitmap.isRecycled()) {
        return null;
    }

    final int width = bitmap.getWidth() + borderWidth;
    final int height = bitmap.getHeight() + borderWidth;

    Bitmap canvasBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    BitmapShader shader = new BitmapShader(bitmap, TileMode.CLAMP, TileMode.CLAMP);
    Paint paint = new Paint();
    Paint.setAntiAlias(true);
    Paint.setShader(shader);

    Canvas canvas = new Canvas(canvasBitmap);
    float radius = width > height ? ((float) height) / 2f : ((float) width) / 2f;
    canvas.drawCircle(width / 2, height / 2, radius, Paint);
    Paint.setShader(null);
    Paint.setStyle(Paint.Style.STROKE);
    Paint.setColor(Color.BLUE);
    Paint.setStrokeWidth(borderWidth);
    canvas.drawCircle(width / 2, height / 2, radius - borderWidth / 2, Paint);
    return canvasBitmap;
}
22
Gopal Gopi

Commencez par obtenir l’image Circulat avec votre code. Appliquez ensuite le code xml: 

 <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="oval" >
    <gradient Android:startColor="#333440" Android:endColor="#333440"
        Android:angle="270"/>
</shape>

Ajoutez ensuite une mise en page relative et ajoutez-y une image view.Arrangez-la au centre de la mise en page relative.Et définissez cette forme de cercle comme arrière-plan Imageview. imageview margin vous obtiendrez l'effet de bordure souhaité. J'espère que cela vous aidera.

4
SweetWisher ツ

Ce n'est peut-être pas le meilleur moyen et vous ne pourrez peut-être pas modifier beaucoup de propriétés, mais c'est sûrement le moyen le plus simple. Je viens d'utiliser this library et j'ai créé une image circulaire comportant également une bordure.


Donc, voici ma solution:

First , je mets ceci dans mon build.grandle:

`compile 'com.github.siyamed:Android-shape-imageview:0.9.+@aar'`

Second , je mets ceci dans mon fichier de mise en page .xml:

 <com.github.siyamed.shapeimageview.CircularImageView
                    Android:layout_width="150dp"
                    Android:layout_gravity="center_horizontal"
                    Android:layout_height="150dp"
                    Android:id="@+id/photo"
                    app:siBorderWidth="5dp"
                    app:siBorderColor="#ffffff"
                    Android:layout_alignParentTop="true"
                    Android:layout_centerHorizontal="true" />

Dans mon fichier .Java, voici comment je peux prendre ou définir l'image sur CircularImageView:

final com.github.siyamed.shapeimageview.CircularImageView photo = (com.github.siyamed.shapeimageview.CircularImageView) convertView.findViewById(R.id.photo);

photo.setBackgroundResource(R.drawable.female);

C'est tout ce que j'ai fait pour faire une image circulaire avec une bordure blanche. 

4
Marialena

Commencez par ajouter la ligne ci-dessous à build.gradle file

implementation 'de.hdodenhof:circleimageview:2.2.0'

puis ajoutez le code suivantXMLà xml :

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

 enter image description here

2
Md Nakibul Hassan

Non, il n'est pas nécessaire que vous utilisiez deux vues d'image, une pour l'image et l'autre pour la bordure blanche. Vous pouvez créer un nouveau fichier XML comme ci-dessous

border.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<solid Android:color="#FFFFFF" />
<stroke Android:width="5dp" Android:color="#000000" />
<padding Android:left="5dp" Android:top="5dp" Android:right="5dp"
    Android:bottom="5dp" />
</shape>

puis réglez-le sur votre vue d'image. Comme ajouter ligne ci-dessous à votre image-vue.

Android:background="@drawable/border"
1
InnocentKiller

Voici un Nice tutorial for it.

dans ce tutoriel, ils utilisent une méthode: -

/* * Création d’une image en forme circulaire * /

public Bitmap getRoundedShape(Bitmap scaleBitmapImage) {
  // TODO Auto-generated method stub
  int targetWidth = 50;
  int targetHeight = 50;
  Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, 
                            targetHeight,Bitmap.Config.ARGB_8888);

                Canvas canvas = new Canvas(targetBitmap);
  Path path = new Path();
  path.addCircle(((float) targetWidth - 1) / 2,
  ((float) targetHeight - 1) / 2,
  (Math.min(((float) targetWidth), 
                ((float) targetHeight)) / 2),
          Path.Direction.CCW);

                canvas.clipPath(path);
  Bitmap sourceBitmap = scaleBitmapImage;
  canvas.drawBitmap(sourceBitmap, 
                                new Rect(0, 0, sourceBitmap.getWidth(),
    sourceBitmap.getHeight()), 
                                new Rect(0, 0, targetWidth,
    targetHeight), null);
  return targetBitmap;
 }

Pour créer une bordure autour de votre imageView:

Ajoutez ce XML dans votre dossier pouvant être dessiné:

=> arrondi.xml

<?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="3dip"
        Android:color="#FF0000" />

    <corners Android:radius="10dp" />

    <padding
        Android:bottom="0dp"
        Android:left="0dp"
        Android:right="0dp"
        Android:top="0dp" />

</shape>

Espérons que cela aidera

1
praveen Sharma

 circular image view with rounded white border

En utilisant ce link i, j'ai réussi à le créer, en utilisant FrameLayout et two RoundedImageView. La logique derrière ce que j'ai fait est que l'un est une vue wrapper et l'autre est la vue avec l'image de profil. Voici mon code 

code XML:

    <FrameLayout
    Android:id="@+id/llImageProfile"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_marginLeft="20dp"
    Android:layout_marginTop="40dp"
    Android:foregroundGravity="center">


    <com.pepperpk.frt.mallpk.custom.RoundedImageView
        Android:id="@+id/circleViewOverlay"
        Android:layout_width="100dp"
        Android:layout_height="100dp"
        Android:layout_gravity="center" />

    <com.pepperpk.frt.mallpk.custom.RoundedImageView
        Android:id="@+id/circleView"
        Android:layout_width="95dp"
        Android:layout_height="95dp"
        Android:layout_gravity="center" />
</FrameLayout>

Code Java:

profileWrapper.setImageResource(R.drawable.white_background);
profile.setImageResource(R.drawable.profile);

espérons que cela aide, si vous avez une confusion s'il vous plaît commenter ci-dessous.

0
Syed Raza Mehdi

J'ai essayé de conserver ImageView dans CardView et ai ajusté le rayon de CardView en conséquence.

NetworkImageView est celui de Volley Library. Idem Devrait également fonctionner avec ImageView.

<Android.support.v7.widget.CardView
            Android:layout_width="105dp"
            Android:layout_height="105dp"
            Android:layout_margin="5dp"
            Android:elevation="0dp"
            Android:id="@+id/card_image_view"
            app:cardCornerRadius="53dp"
            Android:innerRadius="0dp"
            Android:background="@color/reco_widget_search_background"
            Android:shape="ring"
            Android:thicknessRatio="1">

            <NetworkImageView
                Android:id="@+id/circle_networkImageViewProduct"
                Android:layout_width="105dp"
                Android:layout_height="105dp"
                Android:backgroundTint="@color/white"
                Android:tint="@color/white"
                Android:scaleType="fitXY"
                Android:layout_gravity="center"
                Android:visibility="gone"
                />
        </Android.support.v7.widget.CardView>
0
Max Droid
Try This
    public static Bitmap createRoundImage(Bitmap loadedImage) {
    System.out.println("loadbitmap" + loadedImage);
    loadedImage = Bitmap.createScaledBitmap(loadedImage, 100, 100, true);
    Bitmap circleBitmap = Bitmap.createBitmap(loadedImage.getWidth(),
            loadedImage.getHeight(), Bitmap.Config.ARGB_8888);
    BitmapShader shader = new BitmapShader(loadedImage,
            Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
    Paint paint = new Paint();
    Paint.setAntiAlias(true);
    Paint.setShader(shader);

    Canvas c = new Canvas(circleBitmap);
    c.drawCircle(loadedImage.getWidth() / 2, loadedImage.getHeight() / 2,
            loadedImage.getWidth() / 2, Paint);
    return circleBitmap;
}
0
Palak