1. 程式人生 > >Android 使用Drawable實現圓角與圓形圖案

Android 使用Drawable實現圓角與圓形圖案

第一步:建立類RoundCircleDrawable繼承Drawable

/**
 * 圓角矩形
 * @Project    App_View
 * @Package    com.android.view.drawable
 * @author     chenlin
 * @version    1.0
 * @Date       2016年4月21日
 * @Note       TODO
 */
public class RoundCircleDrawable extends Drawable{
    private Paint mPaint;//畫筆
    private int mWidth;//圖片寬與長度的最小值
private int mRadius;//半徑 private int mRound;//圓角 private RectF mRectF;//矩形 private Bitmap mBitmap;//圖片 private Type mType = Type.TYPE_ROUND;//預設是矩形 //設定型別 enum Type{ TYPE_ROUND, TYPE_CICLE; } public RoundCircleDrawable(Bitmap bitmap){ this.mBitmap = bitmap; //初始化畫筆
mPaint = new Paint(); mPaint.setAntiAlias(true); BitmapShader shader = new BitmapShader(mBitmap, TileMode.CLAMP, TileMode.CLAMP); mPaint.setShader(shader); mWidth = Math.min(mBitmap.getWidth(), mBitmap.getHeight()); mRadius = mWidth / 2; } /** * 向外提供設定圖片型別的方法 * @param
type */
public void setType(Type type){ this.mType = type; } /** * 暴露給外面設定圓角的大小 * * @param round */ public void setRound(int round) { this.mRound = round; } @Override public void setBounds(int left, int top, int right, int bottom) { super.setBounds(left, top, right, bottom); mRectF = new RectF(left, top, right, bottom); } @Override public void draw(Canvas canvas) { if (mType == Type.TYPE_ROUND) { canvas.drawRoundRect(mRectF, mRound, mRound, mPaint); }else { canvas.drawCircle(mWidth / 2, mWidth / 2, mRadius, mPaint); } } @Override public int getIntrinsicWidth() { if (mType == Type.TYPE_CICLE) { return mWidth; }else { return mBitmap.getWidth(); } } @Override public int getIntrinsicHeight() { if (mType == Type.TYPE_CICLE) { return mWidth; }else { 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; } }

2.實現方法

public class RoundActivity extends Activity {

    private ImageView mImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_round_drawable);
        mImageView = (ImageView) findViewById(R.id.iv_round);
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.aa);
        //RoundImageDrawable drawable = new RoundImageDrawable(bitmap);
        //drawable.setRound(30);

        RoundCircleDrawable drawable = new RoundCircleDrawable(bitmap);
        drawable.setRound(50);
        mImageView.setImageDrawable(drawable);
    }
}

———————————————————————
有需求者請加qq:136137465,非誠勿擾
(java 架構師全套教程,共760G, 讓你從零到架構師,每月輕鬆拿3萬)
01.高階架構師四十二個階段高
02.Java高階系統培訓架構課程148課時
03.Java高階網際網路架構師課程
04.Java網際網路架構Netty、Nio、Mina等-視訊教程
05.Java高階架構設計2016整理-視訊教程
06.架構師基礎、高階片
07.Java架構師必修linux運維繫列課程
08.Java高階系統培訓架構課程116課時
(送:hadoop系列教程,java設計模式與資料結構, Spring Cloud微服務, SpringBoot入門)
——————————————————————–