使用BitmapShader在自定义View中画圆形

来源:互联网 发布:中文域名有什么价值 编辑:程序博客网 时间:2024/06/13 09:57
/** * 画个圆 * Created by cold on 15/9/21. */public class BitShape extends View {    private Bitmap bitmap;    private Context context;    private BitmapShader bitmapShader;    //该view为50dp的圆    private int width=50;    private int widthpx;//图片的宽度像素    private float mRadius;//圆半径    private Matrix mMatrix;//缩放矩阵    private Paint bitmapPaint;//画笔    //在构造方法中各种初始化    public BitShape(Context context) {        super(context);        this.context=context;        //设置默认显示的图片        this.bitmap=getRes("default_pic");        bitmapPaint = new Paint();        bitmapPaint.setAntiAlias(true);        mMatrix = new Matrix();        bitmapShader=new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);        bitmapPaint.setShader(bitmapShader);    }    public BitShape(Context context, AttributeSet attrs) {        super(context, attrs);        this.context=context;        this.bitmap=getRes("default_pic");        bitmapPaint = new Paint();        bitmapPaint.setAntiAlias(true);        mMatrix = new Matrix();        bitmapShader=new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);        bitmapPaint.setShader(bitmapShader);    }    //设置大小为50dp    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        widthpx=dp2px(width);        mRadius=widthpx/2;        setMeasuredDimension(widthpx,widthpx);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        //先设置图片的缩放        float scale = 1.0f;        // 拿到bitmap宽或高的小值        int bSize = Math.min(bitmap.getWidth(), bitmap.getHeight());        scale = widthpx * 1.0f / bSize;        // shader的变换矩阵,我们这里主要用于放大或者缩小        mMatrix.setScale(scale, scale);        // 设置变换矩阵        bitmapShader.setLocalMatrix(mMatrix);        //调用.setShader方法        bitmapPaint.setShader(bitmapShader);        //画圆        canvas.drawCircle(mRadius, mRadius, mRadius, bitmapPaint);    }    //改变要绘制的bitmap    public void changeBitmap(Bitmap bitmap){        this.bitmap=bitmap;        bitmapShader=new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);        //通知重绘        postInvalidate();    }    //获取Bitmap    public Bitmap getRes(String name) {        ApplicationInfo appInfo = context.getApplicationInfo();        int resID = getResources().getIdentifier(name, "drawable", appInfo.packageName);        return BitmapFactory.decodeResource(getResources(), resID);    }    public int dp2px(int dpVal)    {        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,                dpVal, getResources().getDisplayMetrics());    }}

0 0
原创粉丝点击