01/10/2018, 22:28

Bo tròn ảnh trong Android

Bo tròn ảnh trong Android Tháng Mười Một 30, 2014 nguyenvanquan7826 LT Android Leave a response 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ừ ...

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

cricle imageview in android

Trước tiên các bạn tạo 1 class CricleImage kế thừa từ ImageView như sau:

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:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_awidth="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_awidth="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_awidth="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

0