android 自定义圆角头像以及使用declare-styleable进行配置属性解析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

android 自定义圆角头像以及使用declare-styleable进行配置属性解析由于最新项目中正在检查UI是否与效果图匹配,结果关于联系人模块给的默认图片是四角稍带弧度的圆角,而我们截取的图片是正方形的,现在要给应用统一替换。应用中既用到大圆角头像(即整个头像是圆的)又用到四角稍带弧度的圆角头像,封装一下以便重用。以下直接见代码

[java] view plain copy 在CODE上查看代码片派生到我的代码片

package com.test.demo;

import com.test.demo.R;

import android.content.Context;

import android.content.res.TypedArray;

import android.graphics.Bitmap;

import android.graphics.BitmapShader;

import android.graphics.Canvas;

import android.graphics.Matrix;

import android.graphics.Paint;

import android.graphics.RectF;

import android.graphics.Shader.TileMode;

import android.graphics.drawable.BitmapDrawable;

import android.graphics.drawable.Drawable;

import android.os.Bundle;

import android.os.Parcelable;

import android.util.AttributeSet;

import android.util.Log;

import android.util.TypedValue;

import android.widget.ImageView;

/**

* 圆角imageview

*/

public class RoundImageView extends ImageView {

private static final String TAG = "RoundImageView";

/**

* 图片的类型,圆形or圆角

*/

private int type;

public static final int TYPE_CIRCLE = 0;

public static final int TYPE_ROUND = 1;

/**

* 圆角大小的默认值

*/

private static final int CORNER_RADIUS_DEFAULT = 10;

/**

* 圆角的大小

*/

private int mCornerRadius;

/**

* 绘图的Paint

*/

private Paint mBitmapPaint;

// 按下状态颜色

private Paint mPressedColorPaint;

private int pressedColor;

/**

* 圆角的半径

*/

private int mRadius;

/**

* 3x3 矩阵,主要用于缩小放大

*/

private Matrix mMatrix;

/**

* view的宽度

*/

private int mWidth;

private RectF mRoundRect;

public RoundImageView(Context context, AttributeSet attrs) {

super(context, attrs);

mMatrix = new Matrix();

mBitmapPaint = new Paint();

mBitmapPaint.setAntiAlias(true);

TypedArray a = context.obtainStyledAttributes(attrs,

R.styleable.RoundImageView);

pressedColor = a.getColor(R.styleable.RoundImageView_pressed_color, -1);

if (pressedColor != -1) {

mPressedColorPaint = new Paint();

mPressedColorPaint.setAntiAlias(true);

mPressedColorPaint.setColor(pressedColor);

}

mCornerRadius = a.getDimensionPixelSize(

R.styleable.RoundImageView_corner_radius, (int) TypedValue

.applyDimension(PLEX_UNIT_DIP,

CORNER_RADIUS_DEFAULT, getResources()

.getDisplayMetrics()));// 默认为10dp type = a.getInt(R.styleable.RoundImageView_type, TYPE_CIRCLE);// 默认为Circle

a.recycle();

}

public RoundImageView(Context context) {

this(context, null);

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec);

/**

* 如果类型是圆形,则强制改变view的宽高一致,以小值为准

*/

if (type == TYPE_CIRCLE) {

mWidth = Math.min(MeasureSpec.getSize(widthMeasureSpec),

MeasureSpec.getSize(heightMeasureSpec));

mRadius = mWidth / 2;

}

}

/**

* 初始化BitmapShader

*/

private void setUpShader() {

Drawable drawable = getDrawable();

if (drawable == null) {

return;

}

Bitmap bmp = drawableToBitamp(drawable);

// 将bmp作为着色器,就是在指定区域内绘制bmp

相关文档
最新文档