欢迎关注我的公众号 “安安安安卓”,学习更多知识
读一本好书。 ——我说的
前面几篇文章我们分别讲了自定义控件中常用到的 Canvas、Paint、Path。本篇我们在前面几篇的基础上更进一步,绘制一篇海底世界的效果。
项目github地址
绘制过程
绘制背景
首先大海应该是蓝色的吧,而且应该是一个渐变色,那么根据 paint 篇的内容,我们便可以使用 paint.setShader 来实现,实现思路就是使用 Canvas.drawRect 方法绘制整个画布,画笔 Paint 设置一个 Shader,代码如下:
paintBack.shader = LinearGradient(
measuredWidth / 3f,
0f,
measuredWidth * 2 / 3f,
measuredHeight.toFloat(),
Color.WHITE,
Color.parseColor("#000055"),
Shader.TileMode.CLAMP
)
canvas.drawRect(background, paintBack)
效果大概这个样子
绘制鲸鱼
咳咳,鲸鱼这个东西我在百度上面找了一张图片
而后使用 ps 抠出了其中最漂亮的大蓝鲸,并且使用 ps 液化工具对蓝鲸的尾巴进行了处理,目的就是让蓝鲸在运动的过程中尾巴不停的摆动从而实现游泳的效果
代码:
private val bitmaps = listOf(
BitmapFactory.decodeResource(context.resources, R.drawable.bluefish1),
BitmapFactory.decodeResource(context.resources, R.drawable.bluefish2),
BitmapFactory.decodeResource(context.resources, R.drawable.bluefish3),
BitmapFactory.decodeResource(context.resources, R.drawable.bluefish4),
BitmapFactory.decodeResource(context.resources, R.drawable.bluefish3),
BitmapFactory.decodeResource(context.resources, R.drawable.bluefish2),
BitmapFactory.decodeResource(context.resources, R.drawable.bluefish1),
)
canvas.run {
drawBitmap(bitmaps[bitmapIndex % bitmaps.size], 100f, 100f, paint)
bitmapIndex++
drawFishWithPath()
}
实现效果:
虎鲸光能摆动尾巴还是不够的,我们还应有让他能做游泳的动作,最好能按照我们指定的路径来运动是最好的了
最后
下面是辛苦给大家整理的学习路线,有需要的可以点击这里免费获取
F%E9%AB%98%E8%96%AA%EF%BC%81.md)
[外链图片转存中…(img-FZtZQERx-1643952937048)]