您的位置:首页 > 移动开发 > Android开发

Android开发_自定义圆形头像控件

2017-03-22 08:37 513 查看

Android开发_自定义圆形头像控件

安卓中所有的控件在绘制时都是按照矩形绘制的,我们可以看到很多主流APP会加载一些圆形图片,看起来更优雅美观.我们可以通过自定义控件来完成圆形图片的加载

首先我们写一个类继承ImageView.

public abstract class MaskedImage  extends ImageView{
private static Xfermode MASK_XFERMODE;
private Bitmap mask;
private Paint paint;

static {
PorterDuff.Mode localMode = PorterDuff.Mode.DST_IN;
MASK_XFERMODE = new PorterDuffXfermode(localMode);
}

public MaskedImage(Context context) {
super(context);
}

public MaskedImage(Context context, AttributeSet attrs) {
super(context, attrs);
}

public MaskedImage(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@Override
protected void onDraw(Canvas canvas) {
Drawable localDrawable = getDrawable();
if (localDrawable == null)
return;
try {
if (this.paint == null) {
Paint localPaint1 = new Paint();
this.paint = localPaint1;
this.paint.setFilterBitmap(false);
Paint localPaint2 = this.paint;
Xfermode localXfermode1 = MASK_XFERMODE;
@SuppressWarnings("unused")
Xfermode localXfermode2 = localPaint2.setXfermode(localXfermode1);
}
float f1 = getWidth();
float f2 = getHeight();
int i = canvas.saveLayer(0.0F, 0.0F, f1, f2, null,Canvas.ALL_SAVE_FLAG);
int j = getWidth();
int k = getHeight();
localDrawable.setBounds(0, 0, j, k);
localDrawable.draw(canvas);
if ((this.mask == null) || (this.mask.isRecycled())) {
Bitmap localBitmap1 = createMask();
this.mask = localBitmap1;
}
Bitmap localBitmap2 = this.mask;
Paint localPaint3 = this.paint;
canvas.drawBitmap(localBitmap2, 0.0F, 0.0F, localPaint3);
canvas.restoreToCount(i);
return;
} catch (Exception localException) {
StringBuilder localStringBuilder = new StringBuilder()
.append("Attempting to draw with recycled bitmap. View ID = ");
System.out.println("localStringBuilder=="+localStringBuilder);
}

}

public abstract Bitmap createMask();


}

该类暴露出属性方法,写一个具体的实现类.

public class CircularImage extends MaskedImage {
public CircularImage(Context context) {
super(context);
}

public CircularImage(Context context, AttributeSet attrs) {
super(context, attrs);
}

public CircularImage(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@Override
public Bitmap createMask() {
int i = getWidth();
int j = getHeight();
Bitmap.Config localConfig = Bitmap.Config.ARGB_8888;
Bitmap localBitmap = Bitmap
8a23
.createBitmap(i, j, localConfig);
Canvas localCanvas = new Canvas(localBitmap);
Paint localPaint = new Paint(1);
localPaint.setColor(Color.WHITE);
float f1 = getWidth();
float f2 = getHeight();
RectF localRectF = new RectF(0.0F, 0.0F, f1, f2);
localCanvas.drawOval(localRectF, localPaint);
return localBitmap;
}


}

在布局中引用也是很简单的.

<com.jinxing.ui.widget.CircularImage
android:id="@+id/me_ib_icon"
android:layout_width="80dip"
android:layout_height="80dip"/>

meIbIcon.setImageResource(R.drawable.ic_Icon);


Mr.Jin版权所有,转载请声明出处

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: