Android paint详解

本文详细介绍了Android中的Paint类,作为绘图的重要工具,它用于设置画笔的各种属性,如抗锯齿、颜色、透明度、样式等。文章讨论了Paint的常用属性,包括设置颜色、透明度、线条样式和文本样式等,并提供了代码示例。此外,还提到了Paint的源码分析,探讨了其不同的构造函数和风格选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Paint是什么?

上篇文章里面有谈到自定义控件是如何实现的,我们一般会在init()方法里面初始化我们所需要的工具类等,就例如Paint。从字面上的意思可以看得出来paint就是画笔的意思,可以用来进行画画。在android中就是用来进行绘图的必要工具。

Paint如何用?

如图:
这里写图片描述
在init()方法里面进行初始化Paint画笔,并且设置画笔的属性。

Paint属性有那些?

我们看看IDE给我们的提示:
这里写图片描述

reset() //重置Paint。
setFlags(int flags)//设置一些标志,比如抗锯齿,下划线等等。
setAntiAlias(boolean aa)//设置抗锯齿,如果不设置,加载位图的时候可能会出现锯齿状的边界,如果设置,边界就会变的稍微有点模糊,锯齿就看不到了。
setDither(boolean dither)//设置是否抖动,如果不设置感觉就会有一些僵硬的线条,如果设置图像就会看的更柔和一些。
setLinearText(boolean linearText)//这个是文本缓存,设置线性文本,如果设置为true就不需要缓存,
setSubpixelText(boolean subpixelText)//设置亚像素,是对文本的一种优化设置,可以让文字看起来更加清晰明显,可以参考一下PC端的控制面板-外观和个性化-调整ClearType文本。
setUnderlineText(boolean underlineText)//设置文本的下划线。
setStrikeThruText(boolean strikeThruText)//设置文本的删除线。
setFakeBoldText(boolean fakeBoldText)//设置文本粗体。
setFilterBitmap(boolean filter)//对位图进行滤波处理,如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示 。
setStyle(Style style),setStrokeCap(Cap cap),setStrokeJoin(Join join),setTextAlign(Align align)//下面这几个就不用说了,上面已经演示过。
setColor(int color)//设置画笔颜色。
setAlpha(int a)//设置画笔的透明度[0-255],0是完全透明,255是完全不透明。
setARGB(int a, int r, int g, int b)//设置画笔颜色,argb形式alpha,red,green,blue每个范围都是[0-255],
setStrokeWidth(float width)//画笔样式为空心时,设置空心画笔的宽度。
setStrokeMiter(float miter)//当style为Stroke或StrokeAndFill时设置连接处的倾斜度,这个值必须大于0,看一下演示结果左上角的没有设置setStrokeMiter,右上角setStrokeMiter(2.3f),左下角setStrokeMiter(1.7f)。
setShader(Shader shader)//设置着色器,用来给图像着色的,绘制出各种渐变效果,有BitmapShader,ComposeShader,LinearGradient,RadialGradient,SweepGradient几种,这个以后再单独讲。
setColorFilter(ColorFilter filter)//设置画笔颜色过滤器,有ColorMatrixColorFilter,LightingColorFilter,PorterDuffColorFilter几种,这个以后再单独分析
setXfermode(Xfermode xfermode)//设置图形重叠时的显示方式,下面来演示一下
setMaskFilter(MaskFilter maskfilter)//对图像进行一定的处理,实现滤镜的效果,如滤化,立体等,有BlurMaskFilter,EmbossMaskFilter几种
setTypeface(Typeface typeface)//设置字体样式,可以是Typeface设置的样式,也可以通过Typeface的createFromAsset(AssetManager mgr, String path)方法加载样式
setShadowLayer(float radius, float dx, float dy, int shadowColor)//设置阴影效果,radius为阴影角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色 ,看一下演示效果,其中第一个是没有阴影的,第二个设置了黑色的阴影。
setTextLocale(Locale locale)//设置地理位置,比如显示中文,日文,韩文等,默认的显示Locale.getDefault()即可 。
setElegantTextHeight(boolean elegant)//设置优雅的文字高度,这个设置可能会对FontMetrics产生影响。
setTextSize(float textSize)//设置字体大小。
setTextScaleX(float scaleX)//设置字体的水平方向的缩放因子,默认值为1,大于1时会沿X轴水平放大,小于1时会沿X轴水平缩小。
setTextSkewX(float skewX)//设置文本在水平方向上的倾斜,默认值为0,推荐的值为-0.25,
setLetterSpacing(float letterSpacing)//设置行的间距,默认值是0,负值行间距会收缩。
setFontFeatureSettings(String settings)//设置字体样式,可以设置CSS样式。
FontMetrics//这个Paint的静态内部类,主要用于字体的高度,以后再分析。
getTextWidths(char[] text, int index, int count,float[] widths),getTextWidths(CharSequence text, int start, int end, float[] widths),getTextWidths(String text, int start, int end, float[] widths),getTextWidths(String text, float[] widths)//提取指定范围内的字符串,保存到widths中,
getTextPath(char[] text, int index, int count, float x, float y, Path path),getTextPath(String text, int start, int end, float x, float y, Path path)//获取文本绘制的路径,提取到Path中,
getTextBounds(String text, int start, int end, Rect bounds) ,getTextBounds(char[] text, int index, int count, Rect bounds)//得到文本的边界,上下左右,提取到bounds中,可以通过这计算文本的宽和高。

Paint常用属性
        mPaint = new Paint();
        mPaint.setAntiAlias(true);//抗锯齿
        mPaint.setStyle(Paint.Style.FILL);//设置画笔风格
        mPaint.setColor(Color.BLUE);//设置画笔颜色
        mPaint.setTextSize(25);//设置字体的尺寸
        mPaint.setAlpha(50);//设置画壁的透明度
        mPaint.setStrokeWidth(20);//设置空心边框的宽度
Paint源码简析

这里写图片描述
Paint 有三个构造函数,分别是:
Paint()创建一个画笔对象;
Paint(int flags):在构造的时候可以传入一些定义好的属性,eg:Paint.ANTI_ALIAS_FLAG
用于绘制时抗锯齿
Paint(Paint paint):使用构造函数中Paint的属性生成一个新的Paint
打开Paint源码我们可以看到画笔有好几种风格可以提供给我们使用。
这里写图片描述

Style.FILL_AND_STROKE,Style.STROKE, Style.FILL
填充内部和描边,描边,填充内部
这里写图片描述

Cap.BUTT, Cap.ROUND, Cap.SQUARE
这个风格是针对线起作用
这里写图片描述
代码如下
这里写图片描述

Join.MITER, Join.ROUND, Join.BEVEL
这个风格是针对
这里写图片描述

代码如下
这是针对画矩形
这里写图片描述

基本上就分析到这里,有新的分析下回分解。。点个赞好吗?菜牛开心~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值