欢迎关注我的公众号 “安安安安卓”,学习更多知识

读一本好书。 ——我说的

前面几篇文章我们分别讲了自定义控件中常用到的 Canvas、Paint、Path。本篇我们在前面几篇的基础上更进一步,绘制一篇海底世界的效果。

项目github地址

github.com/ananananzhu…

绘制过程

绘制背景

首先大海应该是蓝色的吧,而且应该是一个渐变色,那么根据 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)]

android自定义控件——画一个海底世界,Android面试相关文章及Github学习资料相关推荐

  1. Java面试相关文章及Github学习资料

    前言 人人都想进大厂,当然我也不例外.早在春招的时候我就有向某某某大厂投岗了不少简历,可惜了,疫情期间都是远程面试,加上那时自身也有问题,导致屡投屡败.突然也意识到自己肚子里没啥货,问个啥都是卡卡卡卡 ...

  2. android canvas 画圆边缘模糊,Android canvas画圆

    布局 android:id="@+id/ballView2" android:layout_width="match_parent" android:layou ...

  3. android自定义控件是一个 内部类 如何在xml中引用,android 自定义view属性

    android 自定义view属性 一个完美的自定义控件也可以添加xml来配置属性和风格.要实现这一点,可按照下列步骤来做: 1) 添加自定义属性到xml文件中 2) 在xml的中,指定属性的值 3) ...

  4. Android shape画一个圆角虚线框

  5. Android开发画出中国地图,Android 绘制中国地图

    最近的版本有这样一个需求: 有 3 个要素: 中国地图 高亮省区 中心显示数字 面对这样一个需求,该如何实现呢? 高德地图 因为项目是基于高德地图来做的,所以很自然而然的想到了高德.但是当查阅高德地图 ...

  6. android opencv画轮廓,如何在Android的OpenCV中从每个轮廓提取线条?

    我想检查每个Canny检测到的边缘,并在其中寻找主线(以检查它们是否看起来像一个矩形,例如,两对线是否平行等). Imgproc.HoughLinesP可以满足我的要求,但是它给出了整个图像中的线条, ...

  7. android studio 导入一个已有的android studio project作为lib使用

    新项目来了. 需要搭建框架. android studio对我来说还是很陌生,之前一个项目在同事的帮助下搭建了环境,完全蒙查查, 所以准备将这次搭建过程尽可能描述的详细一些,以备以后不时之需. 1.新 ...

  8. android代码画出波浪球,Android绘制波浪曲线,效果很赞的。

    github地址:https://github.com/sddyljsx/Android-SurfView-WaveView package neal.canvas; import android.c ...

  9. Android动态日志,一个简单的Android日志类

    Android自带的日志类不支持显示文件名和行号,调试时很不方便.而第三方日志库往往又太重.所以自己对Android自带的日志类做了一个简单的封装,主要是调试时使用,不考虑日志丢失和性能问题.日志的输 ...

最新文章

  1. MySQL面试题 | 附答案解析(十五)
  2. 如何发表cscd核心论文_新手如何发表论文
  3. NOI模拟题4 Problem C: 填格子(board)
  4. Vue.js 相关知识(动画)
  5. 【转】CT球管小知识--热容量
  6. 课程目标IO java
  7. Python设置画布大小_Python第25课:海龟绘图_自定义函数的应用
  8. 决策树归纳一般框架(ID3,C4.5,CART)
  9. Map集合的4种遍历方式
  10. dev c 编程语言,devc如何自定义头文件并使用
  11. 获取公众号文章封面 API 接口
  12. 华为鸿蒙机顶盒,华为暗中放弃电视盒子业务,上百万的老用户该怎么办?
  13. centos php ioncube_CentOS 7安装ionCube Loader为php解密组件的方法
  14. 小游戏1024纯C语言
  15. Flutter TV应用的开发尝试
  16. google 语音识别 VS 百度语音识别
  17. matlab 相机焦距,世界坐标、相机坐标、图像坐标、像素坐标的原理、关系,并用matlab仿真...
  18. QT项目之键盘控制光标移动
  19. 【Android】虹软、安卓、Uniapp、SpringBoot 实现人脸识别
  20. MySQL [1093] You can‘t specify target table ‘titles_test‘ for update in FROM clause

热门文章

  1. 刚学玩原生JS,自己写了一个小游戏,希望在以后能不断地进步加以改善
  2. oc调用python_引用ios-和引用ios相关的内容-阿里云开发者社区
  3. mysql 索引欣失效的情况
  4. leetcode 400-500
  5. 使用Sinon和Rewire对JavaScript中的私有方法进行单元测试
  6. idea如何设置背景图
  7. java drm_使用Java API建立DRM策略
  8. 【猜拳游戏 基于Objective-C语言】
  9. Affinity Publisher for Mac(逆天排版神器)
  10. 冒泡排序最好时间复杂度为n的代码修改