总结 2017-12-19

来源:互联网 发布:手机电视下载软件 编辑:程序博客网 时间:2024/04/30 02:05
圆形图标的实现:CircleImageView主要就是一个继承了ImageView 的类具体方法,首先先创建一个java文件,用来编写我们的CircleImageView代码,大致内容如下:

package com.example.mrli.fanggouwuche;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.PaintFlagsDrawFilter;import android.graphics.Path;import android.graphics.Region;import android.util.AttributeSet;import android.widget.ImageView;/** * Created by Mr.li on 2017/12/20. */public class CircleImageView extends ImageView {    Path path;    public PaintFlagsDrawFilter mPaintFlagsDrawFilter;// 毛边过滤    Paint paint;    public CircleImageView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        // TODO Auto-generated constructor stub        init();    }    public CircleImageView(Context context, AttributeSet attrs) {        super(context, attrs);        // TODO Auto-generated constructor stub        init();    }    public CircleImageView(Context context) {        super(context);        // TODO Auto-generated constructor stub        init();    }    public void init(){        mPaintFlagsDrawFilter = new PaintFlagsDrawFilter(0,                Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);        paint = new Paint();        paint.setAntiAlias(true);        paint.setFilterBitmap(true);        paint.setColor(Color.WHITE);    }    @Override    protected void onDraw(Canvas cns) {        // TODO Auto-generated method stub        float h = getMeasuredHeight()- 2.0f;        float w = getMeasuredWidth()- 2.0f;        if (path == null) {            path = new Path();            path.addCircle(                    w/2.0f                    , h/2.0f                    , (float) Math.min(w/2.0f, (h / 2.0))                    , Path.Direction.CCW);            path.close();        }        cns.drawCircle(w/2.0f, h/2.0f,  Math.min(w/2.0f, h / 2.0f) + 2.0f, paint);        int saveCount = cns.getSaveCount();        cns.save();        cns.setDrawFilter(mPaintFlagsDrawFilter);        cns.clipPath(path,Region.Op.REPLACE);        cns.setDrawFilter(mPaintFlagsDrawFilter);        cns.drawColor(Color.WHITE);        super.onDraw(cns);        cns.restoreToCount(saveCount);    }}

其次在你想实现我们圆形图标的布局里,这次我们不在使用ImageViiew了  而是直接调用我们的CircleImageView java类
<com.example.mrli.fanggouwuche.CircleImageView
可以直接得圆形图标,简单方便,具体代码如下:

<LinearLayout                android:layout_width="0dp"                android:layout_height="match_parent"                android:layout_weight="3">                <com.example.mrli.fanggouwuche.CircleImageView                    android:src="@drawable/picturela"                    android:layout_height="match_parent"                    android:layout_width="match_parent"/>        </LinearLayout>

原创粉丝点击