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的宽度和高度。
以上就是本文的全部内容,希望对大家的学习有所帮助。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释