Comment ajouter de l'ombre autour de la circulaire imageview

je veux ajouter de l'ombre autour de l'imageView circulaire. Voici mon code. Je veux faire comme cette image image

C'est mon .fichier xml cochez cette image. screenshot1

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<RelativeLayout
    android:id="@+id/layoutTop"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:background="#355482" >
</RelativeLayout>

<RelativeLayout
    android:id="@+id/layoutBottom"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_alignParentBottom="true"
    android:layout_below="@+id/layoutTop"
    android:background="@drawable/loading" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="113dp"
        android:text="Profile"
        android:textColor="#355482"
        android:textSize="20dp"
        android:textStyle="bold" />
</RelativeLayout>

<ImageView
    android:id="@+id/overlapImage"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="132dp"
    android:adjustViewBounds="true"
    android:background="@drawable/round_image"
    android:src="@drawable/ic_launcher" />

c'est round_image.xml:

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="oval">

<solid android:color="#ffffff" />
<corners android:radius="2dp"/>

<size
    android:height="80dp"
    android:width="80dp" />

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

</shape>

j'essaie un code pour l'effet d'ombre mais ça ne marche pas.

15
demandé sur ROMANIA_engineer 2016-05-05 12:17:27

4 réponses

j'Espère que cela va vous aider:)

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

    <item>
        <shape android:shape="oval">
              <solid android:color="@color/gray"/>
                <!--shadow Color-->
        </shape>
    </item>

    <item
        android:left="0dp"
        android:right="0dp"
        android:top="0dp"
        android:bottom="3dp">
        <shape android:shape="oval">
             <solid android:color="@color/lightgrey"/>//Background Color
        </shape>
    </item>
</layer-list>

changez la couleur de fond et la couleur de L'ombre comme vous voulez..

39
répondu Pranita 2016-09-26 12:10:07

avant de répondre, je veux vous donner un conseil. Vous avez juste à mettre le titre de votre question dans Google. J'ai essayé de chercher comme circulaire imageview avec l'ombre android:

Sans utiliser de Bibliothèque:

Modifier android:color="#BDBDBD"forme balise. Votre round_image.xml sera de la forme:

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="oval">

<solid android:color="#BDBDBD" />
<corners android:radius="2dp"/>

<size
    android:height="80dp"
    android:width="80dp" />

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

</shape>

Utilisation De La Bibliothèque:

Avez-vous essayé ce CircularImageView

Vous pouvez utiliser cette bibliothèque ou si vous ne voulez pas utiliser alors obtenez du code de cette bibliothèque interne res dossier.

enter image description here

je vous Remercie.

3
répondu Pratik Butani 2016-05-05 09:39:22

Créer un circle_shadow.xml file et utilise ce code ça marche bien pour moi. Apporter des modifications le rayon en fonction de votre exigence.

enter image description here

circle_shadow.xml

<!-- Drop Shadow -->
<item>
    <shape android:shape="oval">
        <padding
            android:bottom="1dp"
            android:left="1dp"
            android:right="1dp"
            android:top="1dp" />

        <solid android:color="#00CCCCCC" />

        <corners android:radius="3dp" />
    </shape>
</item>
<item>
    <shape android:shape="oval">
        <padding
            android:bottom="1dp"
            android:left="1dp"
            android:right="1dp"
            android:top="1dp" />

        <solid android:color="#10CCCCCC" />

        <corners android:radius="3dp" />
    </shape>
</item>
<item>
    <shape android:shape="oval">
        <padding
            android:bottom="1dp"
            android:left="1dp"
            android:right="1dp"
            android:top="1dp" />

        <solid android:color="#20CCCCCC" />

        <corners android:radius="3dp" />
    </shape>
</item>
<item>
    <shape android:shape="oval">
        <padding
            android:bottom="1dp"
            android:left="1dp"
            android:right="1dp"
            android:top="1dp" />

        <solid android:color="#30CCCCCC" />

        <corners android:radius="3dp" />
    </shape>
</item>
<item>
    <shape android:shape="oval">
        <padding
            android:bottom="1dp"
            android:left="1dp"
            android:right="1dp"
            android:top="1dp" />

        <solid android:color="#50CCCCCC" />

        <corners android:radius="3dp" />
    </shape>
</item>

<!-- Background Color (white) -->
<item>
    <shape android:shape="oval">
        <solid android:color="@android:color/white" />

        <corners android:radius="3dp" />
    </shape>
</item>

1
répondu Anukool srivastav 2018-08-09 09:22:56

cette classe est L'Imageview circulaire personnalisée avec l'ombre,la course, la saturation et en utilisant cette ImageView circulaire personnalisée vous pouvez faire votre image en forme circulaire avec le rayon. Les gars de Circular Shadow ImageView N'ont pas besoin de Github cette classe est suffisante. Ajout dynamique de CircularImageView à votre disposition racine.

  *Adding Circular ImageView to your layout dynamically* 

 RelativeLayout  rootLayout= (RelativeLayout) findViewById(R.id.rootLayout);

   rootLayout.addView(new CircularImageView(this,200,200,imageBitmap));



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" />
0
répondu dileep krishnan 2018-04-18 12:13:28