Android自定义Drawable实现圆角效果

Drawable是一种可绘制资源的载体,如图形、图像等。在实际开发中可以作为view的背景。主要有静态和动态两种方式,静态通过xml描述使用,动态即自定义Drawable。本文实现一个圆形和圆角的背景图片效果。

效果图:

实现方式:

1.初始化一个BitmapShader着色器对象;

2.将着色器对象set给画笔;

3.在画布上绘制圆或圆角即可;

4.使用,view.setBackgroundDrawable

或者 ImageView.setImageDrawable

package com.mydrawable.musk;

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.Shader;

import android.graphics.drawable.Drawable;

/**

* Created by musk.

*/

public class CircleDrawable extends Drawable {

private Paint mPaint;

private int mWidth;

private Bitmap mBitmap;

public CircleDrawable(Bitmap bitmap) {

mBitmap = bitmap;

//着色器,设置横向和纵向的着色模式为平铺

BitmapShader bitmapShader = new BitmapShader(mBitmap,

Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

mPaint = new Paint();

mPaint.setAntiAlias(true);

mPaint.setDither(true);

mPaint.setShader(bitmapShader);

mWidth = Math.min(mBitmap.getWidth(), mBitmap.getHeight());

}

//绘制

@Override

public void draw(Canvas canvas) {

canvas.drawCircle(mWidth / 2, mWidth / 2, mWidth / 2, mPaint);

}

//设置透明度值

@Override

public void setAlpha(int alpha) {

mPaint.setAlpha(alpha);

}

//设置颜色过滤器

@Override

public void setColorFilter(ColorFilter colorFilter) {

mPaint.setColorFilter(colorFilter);

}

//返回不透明度

@Override

public int getOpacity() {

return PixelFormat.TRANSLUCENT;

}

//返回图片实际的宽高

@Override

public int getIntrinsicWidth() {

return mWidth;

}

@Override

public int getIntrinsicHeight() {

return mWidth;

}

}

自定义Drawable有五个方法必须覆写,draw()、setAlpha()、setColorFilter()、getOpacity(),另外的getIntrinsicWidth()和getIntrinsicHeight()是在view设置wrap_content时设置drawable的宽度和高度。

以上是 Android自定义Drawable实现圆角效果 的全部内容, 来源链接: utcz.com/z/342515.html

回到顶部