Bo tròn ảnh trong Android
Bài viết hướng dẫn các bạn có bo tròn ảnh như hình minh họa dưới đây
Trước tiên các bạn tạo 1 class CricleImage kế thừa từ ImageView như sau:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | package cachhoc.net.democircleimageview; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; public class CircleImage extends ImageView { public CircleImage(Context context) { super (context); } public CircleImage(Context context, AttributeSet attrs) { super (context, attrs); } public CircleImage(Context context, AttributeSet attrs, int defStyle) { super (context, attrs, defStyle); } @Override protected void onDraw(Canvas canvas) { Drawable drawable = getDrawable(); if (drawable == null ) { return ; } if (getWidth() == 0 || getHeight() == 0 ) { return ; } Bitmap b = ((BitmapDrawable) drawable).getBitmap(); Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true ); int w = getWidth(); Bitmap roundBitmap = getCroppedBitmap(bitmap, w); canvas.drawBitmap(roundBitmap, 0 , 0 , null ); } public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) { Bitmap sbmp; if (bmp.getWidth() != radius || bmp.getHeight() != radius) sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false ); else sbmp = bmp; Bitmap output = Bitmap.createBitmap(sbmp.getWidth(), sbmp.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final Paint paint = new Paint(); final Rect rect = new Rect( 0 , 0 , sbmp.getWidth(), sbmp.getHeight()); paint.setAntiAlias( true ); paint.setFilterBitmap( true ); paint.setDither( true ); canvas.drawARGB( 0 , 0 , 0 , 0 ); paint.setColor(Color.parseColor( "#BAB399" )); canvas.drawCircle(sbmp.getWidth() / 2 + 0 .7f, sbmp.getHeight() / 2 + 0 .7f, sbmp.getWidth() / 2 + 0 .1f, paint); paint.setXfermode( new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(sbmp, rect, rect, paint); return output; } } |
Tiếp đó bạn vào file activity_main.xml thiết kế giao diện như sau:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 | < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:layout_width = "match_parent" android:layout_height = "match_parent" android:gravity = "center_horizontal" android:orientation = "vertical" > < TextView android:id = "@+id/textView1" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_marginBottom = "5dp" android:layout_marginTop = "30dp" android:text = "@string/avata" android:textAppearance = "?android:attr/textAppearanceLarge" /> < cachhoc.net.democircleimageview.CircleImage android:id = "@+id/img" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:src = "@drawable/nguyenvanquan7826" /> </ LinearLayout > |
Trong đó bạn để ý thẻ cachhoc.net.democircleimageview.CircleImage chính là đường dẫn package chứa file CricleImage.java vừa tạo ở trên.
Vậy là chúng ta được giao diện như đầu bài viết rồi
Bạn có thể download Demo tại đây
Phản hồi gần đây