欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android自定义Drawable实现圆角效果

程序员文章站 2023-12-16 11:34:52
drawable是一种可绘制资源的载体,如图形、图像等。在实际开发中可以作为view的背景。主要有静态和动态两种方式,静态通过xml描述使用,动态即自定义drawable。...

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

效果图:

Android自定义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的宽度和高度。

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

上一篇:

下一篇: