前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自定义Drawable实现圆角图片和圆形图片

自定义Drawable实现圆角图片和圆形图片

作者头像
程序员徐公
发布2018-09-18 17:11:06
9570
发布2018-09-18 17:11:06
举报
文章被收录于专栏:程序员开发工具

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1341967

转载请注明原博客地址:http://write.blog.csdn.net/postedit/51226071

例子源码下载地址:https://github.com/gdutxiaoxu/CustomDrawable

1 自定义圆角图片

 a 继承drawable,重写里面的几个方法

 b 通过构造方法传入Bitmap对象,初始化一个BitmapShader,将其传递给我们的画笔

代码语言:javascript
复制
代码语言:javascript
复制
public RoundImageDrawable(Bitmap bitmap) {
mBitmap = bitmap;
    BitmapShader bitmapShader = new BitmapShader(bitmap, TileMode.CLAMP,
            TileMode.CLAMP);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setShader(bitmapShader);
}

c 在setBounds()初始化一个 ReactF

代码语言:javascript
复制
@Override
public void setBounds(int left, int top, int right, int bottom) {
super.setBounds(left, top, right, bottom);
rectF = new RectF(left, top, right, bottom);
}

 d 在draw()方法里面调用

  canvas.draw()传入我们的矩形对象和画笔

代码语言:javascript
复制
canvas.drawRoundRect(rectF, 30, 30, mPaint);

效果图如下

源码如下:

代码语言:javascript
复制
代码语言:javascript
复制
代码语言:javascript
复制
package com.xujun.administrator.customdrawable.view;

import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.RectF;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.Drawable;

public class RoundImageDrawable extends Drawable {

    private Paint mPaint;
    private Bitmap mBitmap;

    private RectF rectF;

    public RoundImageDrawable(Bitmap bitmap) {
        mBitmap = bitmap;
        BitmapShader bitmapShader = new BitmapShader(bitmap, TileMode.CLAMP,
                TileMode.CLAMP);
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setShader(bitmapShader);
    }

    @Override
    public void setBounds(int left, int top, int right, int bottom) {
        super.setBounds(left, top, right, bottom);
        rectF = new RectF(left, top, right, bottom);
    }

    @Override
    public void draw(Canvas canvas) {
//圆角的 半斤可以通过参数传递进来,这里写死了
        canvas.drawRoundRect(rectF, 30, 30, mPaint);

    }

    @Override
    public int getIntrinsicWidth() {
        return mBitmap.getWidth();
    }

    @Override
    public int getIntrinsicHeight() {
        return mBitmap.getHeight();
    }

    @Override
    public void setAlpha(int alpha) {
        mPaint.setAlpha(alpha);
    }

    @Override
    public void setColorFilter(ColorFilter cf) {
        mPaint.setColorFilter(cf);
    }

    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT;
    }

}
代码语言:txt
复制
**2  自定义圆形图片**

 a 继承drawable,重写里面的几个方法

 b 通过构造方法传入Bitmap对象,初始化一个BitmapShader,将其传递给我们的画笔

代码语言:javascript
复制
    public CircleImageDrawable(Bitmap bitmap) {
        mBitmap = bitmap;
        BitmapShader bitmapShader = new BitmapShader(bitmap, TileMode.CLAMP,
                TileMode.CLAMP);
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setShader(bitmapShader);
//        选择我们的半径为较小的那个
        mWidth = Math.min(mBitmap.getWidth(), mBitmap.getHeight());
    }

c 在Draw()方法里面调用

  canvas.draw()传入我们的矩形对象和画笔

代码语言:javascript
复制
canvas.drawCircle(mWidth / 2, mWidth / 2, mWidth / 2, mPaint);

效果图如下

例子源码下载地址:

https://github.com/gdutxiaoxu/CustomDrawable

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年04月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档