绘制圆形图片

本文介绍了两种绘制圆形图片的方法。一种是通过自定义一个类来实现,另一种是利用已有的CircleImageView类,需要配合下载的attrs文件进行使用,并在布局文件中设置相关属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种方法:自己手写一个类来绘制圆形图片

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+单击,会跳到对应的类中
然后在空间中设置个各种需要的属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值