第一种方法:自己手写一个类来绘制圆形图片
1.写一个类:
`
//这个类要继承imageview
public class CircleView extends ImageView{
int borderWidth;
int borderColor;
//包含三个参数的构造函数我们一般使用有两个参数的就行了
/*public CircleView(Context context) {
super(context);
// 只创建一个图片,各种属性需要自己设置,例如友录头像
}
//onMeasure初步确定控件尺寸,在onDraw方法之前
//onLayout()用来决定子空间如何的摆放,
//onDraw();
public CircleView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// 第三个参数,是自己咋style中设定样式,由系统调用
}*/
public CircleView(Context context, AttributeSet attrs) {
super(context, attrs);
//定义属性集合,定义圆形边线的宽度和颜色,
TypedArray t = context.obtainStyledAttributes(attrs, R.styleable.CircleView);
borderWidth=t.getDimensionPixelSize( R.styleable.CircleView_border_width,0);
borderColor=t.getColor(R.styleable.CircleView_border_color, Color.WHITE);
t.recycle();
//在布局文件中设置好图片的各种属性,第二个参数是属性集合
}
@Override
public void setImageBitmap(Bitmap bm) {
//将bm画到屏幕上;
Bitmap bitmap=Bitmap.createBitmap(bm.getWidth(), bm.getHeight(),Bitmap.Config.ARGB_8888 );
Canvas canvas= new Canvas(bitmap);
Paint paint= new Paint(Paint.ANTI_ALIAS_FLAG);
float r=Math.min(bm.getWidth(),bm.getHeight())/2;
canvas.drawCircle(bm.getWidth()/2, bm.getHeight()/2, r, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bm, 0, 0, paint);
//给圆形图片加一个边,
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(borderWidth);
paint.setColor(borderColor);
canvas.drawCircle(bm.getWidth()/2, bm.getHeight()/2, r-borderWidth/2, paint);
setScaleType(ScaleType.CENTER);
super.setImageBitmap(bitmap);
}
}
2.在布局文件中的res/values目录下新建一个attrs文件夹
里面定义两个属性:border_width定义的是圆形图片绘制的边线的宽度
border_color是边线的颜色
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CircleView">
<attr name="border_width" format="dimension"></attr>
<attr name="border_color" format="color"></attr>
</declare-styleable>
</resources>
3在MainActivity的布局文件中设置
//(1)定义命名空间xmlns:myapp="http://schemas.android.com/apk/res/com.example.view"
名字可以使空间名字自己定,可以使myapp也可以是别的,路径部分的res后面加上刚才写的圆形控件的类项目包名,
<attr name="border_width" format="dimension"></attr>
format中的属性可以使下面中任意一个:
dimension 尺寸
color颜色
string 字符串
reference引用
boolean布尔
interger 整数
float 小数/浮点数
fraction 分数
在使用自定义控件的时需要在布局文件中生命一个命名空间,
命名空间
xmlns:命名空间名称="http://schemas.android.com/apk/res/项目包名"
//(2)定义一个空件来显示图片,空间的名字使用刚才写的圆形图片的:包名+类名;
然后在里面定义各种属性,mayapp是我们定义的命名空间的名字
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:myapp="http://schemas.android.com/apk/res/com.example.view"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<com.example.view.CircleView
android:id="@+id/cv"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_centerInParent="true"
myapp:border_width="2dp"
myapp:border_color="#ffff0000"
></com.example.view.CircleView>
</RelativeLayout>
`
第二种方法:使用写好的类,CircleImageView,这个可以再网上下载下来,注意要配合写好attrs一起使用
1.新建一个包,将下载的类文件复制到包下面
2,将下载的attrs文件复制到res/values下
3,在布局文件中写显示图片的空间
空间的名称使用包名+类名
//注意检查名字有没有写错,:按住ctrl+单击,会跳到对应的类中
然后在空间中设置个各种需要的属性