- 博客(13)
- 收藏
- 关注
原创 自定义View——绘制顺序
1 super.onDraw() 前 or 后?一般的自定义绘制都是直接继承 View 类,然后在onDraw() 中重写它的方法,实现自定义它的绘制。然而,除了继承 View 类,自定义绘制更为常见的情况是,根据自己的需求,判断出你绘制的内容需要盖住控件原有的内容还是需要被控件原有的内容盖住,从而确定你的绘制代码是应该写在super.onDraw() 的上面还是下面。把绘制代码写在super.onDraw()的下面,由于绘制代码会在原有内容绘制结束之后才执行,所以绘制内容就会盖住控件原来...
2022-01-02 14:59:30
268
1
原创 自定义View——范围裁切与几何变换
1 范围裁切范围裁切有两个方法:clipRect()和clipPath()。裁切方法之后的绘制代码,都会被限制在裁切范围内。1.1 clipRect()就是图片的裁剪:记得要加上Canvas.save()和Canvas.restore()来及时恢复绘制范围1.2 clipPath()这个就是沿着路径来裁剪:2 几何变换几何变换的使用大概分为三类:使用 Canvas 来做常见的二维变换; 使用 Matrix 来做常见和不常见的二维变换; 使用...
2021-12-26 14:38:35
376
原创 自定义View——绘制文字
1. Canvas文字的绘制方式Canvas 的文字绘制方式有三种:drawText() drawTextRun() 和 drawTextOnPayth() 。1.1drawText(String text, float x, float y, Paint paint)drawText() 是 Canvas 最基本的绘制文字的方法:给出文字的内容和位置,Canvas 按要求去绘制文字,大概就像这样:方法的参数很简单:text是文字内容,x和y是文字的坐标。而如果你像绘制其他...
2021-12-18 17:04:16
618
原创 自定义View——获取绘制的Path
什么叫「实际Path」?Path就是Path,这加上个「实际」是什么意思?文字的Path?文字还有Path?好,容我娓娓道来。1.1 getFillPath(Path src, Path dst)首先解答第一个问题:“ 实际 Path ”。所谓实际 Path ,指的就是 drawPath() 的绘制内容的轮廓,要算上线条宽度和设置的 PathEffect。默认...
2021-12-12 11:47:11
405
原创 自定义View:阴影与模糊
今天说的这两个效果类的方法:setShadowLayer()和setMaskFilter(),它们设置的是“附加效果”,也就是基于在绘制内容的额外效果。1.1 setShadowLayer(float radius, float dx, float dy, int shadowColor)这是在绘制的内容下面加上一层阴影。大概就像下面这样:里面的参数中, radius 是阴影的模糊范围; dx dy 是阴影的偏移量;shadowColor 是阴影的颜色。如果要清除阴影层,使用...
2021-12-06 21:48:24
630
原创 自定义View:setPathEffect(PathEffect effect)
使用 PathEffect来给图形的轮廓设置效果。对 Canvas所有的图形绘制有效,也就是 drawLine()drawCircle()drawPath()这些方法。大概像这样:下面就具体说一下 Android 中的 6 种 PathEffect。PathEffect 分为两类,单一效果的 CornerPathEffect DiscretePathEffect DashPathEffect PathDashPathEffect ,和组合效果的 SumPathEffect ...
2021-11-28 22:18:50
1674
原创 自定义View:色彩优化
直入主题!Paint 的色彩优化有两个方法:setDither(boolean dither) 和 setFilterBitmap(boolean filter)。这两个方法的作用都是让画面颜色变得更加“顺眼”,但原理和使用场景是不同的。1.1setDither(boolean dither)中文直译过来就是设置抖动,所谓抖动是指把图像从较高色彩深度(即可用的颜色数)向较低色彩深度的区域绘制时,在图像中有意地插入噪点,通过有规律地扰乱图像来让图像对于肉眼更加真实的做法。比如向 1 位色彩深...
2021-11-27 21:03:20
577
原创 自定义View——setXfermode
setXfermode"setXfermode"这个方法能够做什么?大多数情况下我们知道这个就行。对于Android开发中碰到最多的是实现圆形图片显示或是圆角图片,而"setXfermode"的使用就能够实现我们想要的图片效果。Xfermode指的是你要绘制的内容和Canvas的目标位置的内容应该怎样结合计算出最终的颜色。通俗来讲就是要你以绘制的内容作为源图像,以 View 中已有的内容作为目标图像,选取一个PorterDuff.Mode作为绘制内容的颜色处理方案。就像这样:Xfermod..
2021-11-21 10:36:47
2638
原创 自定义View——颜色过滤setColorFilter
1 setColorFilter(ColorFilter colorFilter)ColorFilter这个类,它的名字已经足够解释它的作用:为绘制设置颜色过滤。颜色过滤的意思,就是为绘制的内容设置一个统一的过滤策略,然后Canvas.drawXXX()方法会对每个像素都进行过滤后再绘制出来,等会画出来就自然明白了。这是在 Paint 里设置 ColorFilter ,使用的是 Paint.setColorFilter(ColorFilter filter) 方法。 ColorFilter 并...
2021-11-14 21:42:55
2123
原创 自定义View——把Paint拿捏了
利用Canvas 的 drawXXX() 方法配合 Paint 的几个常用方法可以实现最常见的绘制需求;而如果你只会基本的绘制, Paint 的完全功能的掌握,能让你更进一步,做出一些更加细致、炫酷的效果。把 Paint 掌握之后,你几乎不再会遇到「iOS 组可以实现,但你却实现不了」的绘制效果。好,下面进入正题。Paint的 API 大致可以分为 4 类:颜色 效果 drawText() 相关 初始化下面我就对这 4 类分别进行介绍:1 颜色Canvas绘制的内容,有三层对..
2021-11-13 20:34:34
1323
原创 手把手教学:自定义View——Path设置填充方式
继上一篇介绍了使用drawPath画自定义图形后,今天来继续介绍Path的填充方式——Path.setFillType(FillType) 这是用来设置图形自相交时的填充算法的。方法中填入不同的FillType值,就会有不同的填充效果。FillType的取值有四个:EVEN_ODD WINDING(默认值) INVERSE_EVEN_ODD INVERSE_WINDING直接理解的话就是:WINDING是「全填充」,而EVEN_ODD是「交叉填充」。从网上搜罗了一张比较简单...
2021-11-07 21:17:41
1206
原创 Android 手把手教学:自定义 View——绘制基础
首先总结一下这篇文章中的关键点:自定义绘制的方式是重写绘制方法,其中最常用的是 onDraw() 绘制的关键是 Canvas 的使用 Canvas 的绘制类方法: drawXXX() (关键参数:Paint) Canvas 的辅助类方法:范围裁切和几何变换 可以使用不同的绘制方法来控制遮盖关系这里的知识点并不多,但大家可能也看出来了,我讲得并不细。这是因为知识点虽然不多,但细节还是很多的,仅仅靠一节分享不可能讲完。我会按照顺序把这些知识进行拆分,拆成几节来讲,你按照我的顺序学习下来,肯定
2021-10-31 23:20:16
1833
原创 Android实现点击事件的三种方式
相信每个初学Android的同学都对Button这个控件已经相当熟悉了,那么今天就来写下三种实现点击事件的方法。 首先得要有控件才能实现点击事件,那么我们就在layout文件下放置一个Button控件,easy~,我们让它横竖都居中一下,再加上文字内容,让Button里面的文字也居中一下,字体大小随便写,具体代码如下:<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns...
2021-10-26 00:39:22
8766
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人