import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatImageView;
public class ImageYuan extends AppCompatImageView {
private Paint mPaint;
private Bitmap bitmap;
private Bitmap scaleBitmap;
public ImageYuan(@NonNull Context context) {
this(context, null);
}
public ImageYuan(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setColor(Color.WHITE);
mPaint.setStyle(Paint.Style.FILL);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
//获取图片
Drawable drawable = getDrawable();
if (drawable instanceof BitmapDrawable) {
bitmap = ((BitmapDrawable) drawable).getBitmap();
}
scaleBitmap();
}
private void scaleBitmap() {
int bitmapWidth = bitmap.getWidth();
int bitmapHeight = bitmap.getHeight();
int width = getWidth();
int height = getHeight();
float scaleX=width/(float)bitmapWidth;
float scaleY=height/(float)bitmapHeight;
Matrix matrix=new Matrix();
matrix.setScale(scaleX,scaleY);
scaleBitmap=Bitmap.createBitmap(bitmap,0,0,bitmapWidth,bitmapHeight,matrix,true);
}
@Override
protected void onDraw(Canvas canvas) {
if (bitmap != null) {
drawCircleView(canvas);
} else {
super.onDraw(canvas);
}
}
private void drawCircleView(Canvas canvas) {
int layerId=canvas.saveLayer(0,0,getWidth(),getHeight(),null);
canvas.drawOval(0,0,getWidth(),getHeight(),mPaint);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(scaleBitmap,0,0,mPaint);
mPaint.setXfermode(null);//清空XFermode
canvas.restoreToCount(layerId);
}
}
Android 自定义View实现圆形图片
最新推荐文章于 2023-10-17 15:43:52 发布