Android自定义Drawable实现圆角效果
程序员文章站
2023-12-16 11:34:52
drawable是一种可绘制资源的载体,如图形、图像等。在实际开发中可以作为view的背景。主要有静态和动态两种方式,静态通过xml描述使用,动态即自定义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的宽度和高度。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。