效果圖如下
Paste_Image.png
原圖如下
實現(xiàn)方法:
自定義View 代碼如下(可直接Copy適用)
package com.bxlt.customstudy;
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.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
/**
* 自定義圓角頭像
* Created by Lrxc on 2017/5/22.
*/
public class CircleIco extends View {
private Bitmap bitmap;
public CircleIco(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//繪制
if (bitmap != null)
canvas.drawBitmap(getCircleBitmap(), 0, 0, null);
}
// 設置bitmap
public void setImageBitmap(Bitmap bitmap) {
this.bitmap = bitmap;
invalidate();
}
//獲取圓角圖片
public Bitmap getCircleBitmap() {
//獲取屏幕寬高
int w = getWidth();
int h = getHeight();
//新建一個位圖文件
Bitmap newBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
//在此位圖上進行繪制
Canvas canvas = new Canvas(newBitmap);
//初始化畫筆
Paint paint = new Paint();
// paint.setStrokeWidth(5);//畫筆寬度
// paint.setAntiAlias(true);//是否抗鋸齒
// paint.setDither(true); //防抖動
// paint.setStyle(Paint.Style.FILL); //畫筆類型 STROKE空心 FILL 實心
// paint.setColor(Color.BLUE);//畫筆顏色
//繪制一個圓
int radius = Math.min(w, h) / 2;//獲取寬和高的較小數(shù)
canvas.drawCircle(w / 2, h / 2, radius, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));//圖片相交模式
//繪制圖片底圖
Matrix matrix = new Matrix();
// matrix.postScale(1, 1);//不縮放,原圖顯示
matrix.postScale((float) w / bitmap.getWidth(), (float) h / bitmap.getHeight(), 0, 0);//縮放全部顯示
canvas.drawBitmap(bitmap, matrix, paint);
return newBitmap;
}
// 測量模式
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (bitmap == null) return;
int bw = bitmap.getWidth();
int bh = bitmap.getHeight();
int sizeW = MeasureSpec.getSize(widthMeasureSpec);
int sizeH = MeasureSpec.getSize(heightMeasureSpec);
int modeW = MeasureSpec.getMode(widthMeasureSpec);
int modeH = MeasureSpec.getMode(heightMeasureSpec);
if (modeW == MeasureSpec.AT_MOST)
sizeW = bw;
if (modeH == MeasureSpec.AT_MOST)
sizeH = bh;
setMeasuredDimension(sizeW, sizeH);
}
}
使用自定義View:
布局頁面中,加上這個就行了
<com.bxlt.customstudy.CircleIco
android:id="@+id/customCreame"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
主頁面調用
CircleIco circleIco = (CircleIco) findViewById(R.id.customCreame);
circleIco.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.test));
好了裂逐,就這么簡單而已眶根。比藻。。