画出一个圆圈的imageview
2016-03-05 10:40
357 查看
现在很多头像都是圆圆的,这种自定义view的实现可以通过一下代买来实现,java代码如下:
public class CircleImageView extends ImageView{
int borderColor;
int borderWidth;
public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context,attrs);
}
private void init(Context context, AttributeSet attrs) {
TypedArray t=context.obtainStyledAttributes(attrs, R.styleable.CircleImageView);
borderColor=t.getColor(R.styleable.CircleImageView_border_color, Color.WHITE);
borderWidth=t.getDimensionPixelSize(R.styleable.CircleImageView_border_width, 2);
t.recycle();
}
public CircleImageView(Context context, AttributeSet attrs) {
this(context,attrs,0);
}
public CircleImageView(Context context) {
this(context,null);
}
public void setCircleImageBitmap(Bitmap bitmap){
int width=getWidth();
int height=getHeight();
if(width==0||height==0){
width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
80, getResources().getDisplayMetrics());
height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
80, getResources().getDisplayMetrics());
}
bitmap=Bitmap.createScaledBitmap(bitmap, width, height, true);
Bitmap bm=Bitmap.createBitmap(width,height,bitmap.getConfig());
Canvas c=new Canvas(bm);
Paint p= new Paint(Paint.ANTI_ALIAS_FLAG);
float radius=Math.min(width, height);
c.drawCircle(width/2, height/2, radius/2-borderWidth, p);
p.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
c.drawBitmap(bitmap, 0,0, p);
p.reset();
p.setAntiAlias(true);
p.setStyle(Style.STROKE);
p.setColor(borderColor);
p.setStrokeWidth(borderWidth);
c.drawCircle(width/2, height/2, radius/2-borderWidth, p);
setScaleType(ScaleType.CENTER);
super.setImageBitmap(bm);
}
}
其中使用到的xml属性设置如下,xml代码如下:
<resources>
<declare-styleable name="CircleImageView">
<attr name="border_color" format="color"></attr>
<attr name="border_width" format="dimension"></attr>
</declare-styleable>
</resources>
public class CircleImageView extends ImageView{
int borderColor;
int borderWidth;
public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context,attrs);
}
private void init(Context context, AttributeSet attrs) {
TypedArray t=context.obtainStyledAttributes(attrs, R.styleable.CircleImageView);
borderColor=t.getColor(R.styleable.CircleImageView_border_color, Color.WHITE);
borderWidth=t.getDimensionPixelSize(R.styleable.CircleImageView_border_width, 2);
t.recycle();
}
public CircleImageView(Context context, AttributeSet attrs) {
this(context,attrs,0);
}
public CircleImageView(Context context) {
this(context,null);
}
public void setCircleImageBitmap(Bitmap bitmap){
int width=getWidth();
int height=getHeight();
if(width==0||height==0){
width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
80, getResources().getDisplayMetrics());
height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
80, getResources().getDisplayMetrics());
}
bitmap=Bitmap.createScaledBitmap(bitmap, width, height, true);
Bitmap bm=Bitmap.createBitmap(width,height,bitmap.getConfig());
Canvas c=new Canvas(bm);
Paint p= new Paint(Paint.ANTI_ALIAS_FLAG);
float radius=Math.min(width, height);
c.drawCircle(width/2, height/2, radius/2-borderWidth, p);
p.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
c.drawBitmap(bitmap, 0,0, p);
p.reset();
p.setAntiAlias(true);
p.setStyle(Style.STROKE);
p.setColor(borderColor);
p.setStrokeWidth(borderWidth);
c.drawCircle(width/2, height/2, radius/2-borderWidth, p);
setScaleType(ScaleType.CENTER);
super.setImageBitmap(bm);
}
}
其中使用到的xml属性设置如下,xml代码如下:
<resources>
<declare-styleable name="CircleImageView">
<attr name="border_color" format="color"></attr>
<attr name="border_width" format="dimension"></attr>
</declare-styleable>
</resources>
相关文章推荐
- Android编程UI设计之GridView和ImageView的用法
- 基于Android实现随手指移动的ImageView
- Android中ImageView用法实例分析
- Android程序开发之动态设置ImageView的亮度
- Android实现GridView中ImageView动态变换的方法
- Android控件之ImageView用法实例分析
- 实例解析Android ImageView的scaleType属性
- Android UI之ImageView实现图片旋转和缩放
- Android手势滑动实现ImageView缩放图片大小
- Android编程实现ImageView图片抛物线动画效果的方法
- Android编程简单实现ImageView点击时背景图修改的方法
- android ImageView 的几点经验总结
- Android控件系列之ImageView使用方法
- Android中通过反射实现圆角ImageView代码实例
- Android实现手势控制ImageView图片大小
- Android开发之imageView图片按比例缩放的实现方法
- Android中ImageView使用网络图片资源的方法
- Android实现ImageView图片双击放大及缩小
- Android使用RotateImageView 旋转ImageView
- Android自定义圆角ImageView