Android自定义Drawable实现圆角效果

时间:2022-07-27
本文章向大家介绍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的宽度和高度。

以上就是本文的全部内容,希望对大家的学习有所帮助。