0
点赞
收藏
分享

微信扫一扫

Android自定义View之Canvas,android期末考试选择题

木樨点点 2022-03-19 阅读 29

[https://www.jianshu.com/p/fb18c28d6627]( )

**用继承View的方式来自定义View,我们就需要重写onDraw方法,也就是得咱自己来画图了。画图就得用到画笔和画布,也就是Paint和Canvas。我们来了解下Canvas。

Canvas**

Canvas我们可以简单理解为画布或是ps里面的图层,是绘制图形的直接对象,控制着图形的形状,比如矩形、圆形等。我们在自定义View时,通过调用Canvas的API来绘制具体的图形。

Canvas的常见API

绘制文字

//参数分别表示绘制的内容、绘制起点的坐标和画笔Paint

canvas.drawText(@NonNull String text, float x, float y, @NonNull Paint paint);

绘制点

//参数表示绘制的点的坐标和画笔Paint

canvas.drawPoint(float x, float y, @NonNull Paint paint);

绘制线

//参数分别表示线段的起点和终点坐标,以及画笔Paint

canvas.drawLine(float startX, float startY, float stopX, float stopY,@NonNull Paint paint)

绘制矩形

//参数分别表示四条边距离绘制原点的偏离距离,以及画笔Paint

canvas.drawRect(float left, float top, float right, float bottom, @NonNull Paint paint)

绘制圆角矩形

//参数分别表示矩形的参数、圆角的X方向的半径以及Y方向的半径

canvas.drawRoundRect(@NonNull RectF rect, float rx, float ry, @NonNull Paint paint)

绘制圆

//参数分别表示圆点的坐标以及圆的半径,画笔Paint

canvas.drawCircle(float cx, float cy, float radius, @NonNull Paint paint)

绘制圆弧

//参数分别表示用于定义圆弧的边界椭圆、起始角度、弧度,useCenter表示是否有中心点,以及画笔Paint

drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter,@NonNull Paint paint)

绘制椭圆

//参数分别表示要绘制的椭圆的外接矩形和画笔Paint

canvas.drawOval(@NonNull RectF oval, @NonNull Paint paint)

Canvas的常见API

Canvas的常见API

Canvas的四大方法

保存画布

canvas.save()

作用是将之前的所有已经绘制的图像保存起来,让后续的操作就好像在一个新的图层上操作一样

合并画布

canvas.restore()

可以理解为PS中的合并图层操作。作用是在save()之后绘制的所有图像和save()之前的图像进行合并。

平移画布

canvas.translate(float dx, float dy)

默认的绘图原点在(0,0),调用translate(x,y)后,则将原点移动到了(x,y)。之后的所有绘图操作都将以(x,y)为原

Android自定义View之Canvas,android期末考试选择题

点执行。

旋转画布

canvas.rotate()

将坐标系旋转一定的角度

下面以绘制一个钟表盘为例子来实际运用canvas

以绘制一个位于屏幕中间的钟表盘为例子,这是一个自定义View,在布局文件中LayoutParams属性都设置为match_parent。这样子后面调用View的getWidth()和getHeight()获取的都是屏幕的宽高

<android.support.constraint.ConstraintLayout xmlns:android=“[http://schemas.android.com/apk/res/android]( )”

xmlns:app=“[http://schemas.android.com/apk/res-auto]( )”

xmlns:tools=“[http://schemas.android.com/tools]( )”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

tools:context=“com.xxq2dream.learningtests.MainActivity”>

<com.xxq2dream.myview.CanvasTestView

android:layout_width="match_parent"

android:layout_height="match_parent" />

</android.support.constraint.ConstraintLayout>

(1)首先需要绘制最外面的圆

准备外面圆的画笔Paint

Paint circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);

circlePaint.setColor(Color.parseColor("#000000"));

circlePaint.setStrokeWidth(5);

circlePaint.setStyle(Paint.Style.STROKE);

画圆,这里我们画在屏幕的中间,半径为getWidth()/4

//画圆

canvas.drawCircle(getWidth()/2, getHeight()/2, getWidth()/4, circlePaint);

最外面的圆

(2)画刻度线和刻度

准备画笔Paint

//准备画笔Paint

Paint keduPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

keduPaint.setStrokeWidth(3);

keduPaint.setColor(Color.parseColor("#000000"));

keduPaint.setStyle(Paint.Style.STROKE);

面试复习路线,梳理知识,提升储备

自己的知识准备得怎么样,这直接决定了你能否顺利通过一面和二面,所以在面试前来一个知识梳理,看需不需要提升自己的知识储备是很有必要的。

关于知识梳理,这里再分享一下我面试这段时间的复习路线:(以下体系的复习资料是我从各路大佬收集整理好的)

  • 架构师筑基必备技能
  • Android高级UI与FrameWork源码
  • 360°全方面性能调优
  • 解读开源框架设计思想
  • NDK模块开发
  • 微信小程序
  • Hybrid 开发与Flutter

Android自定义View之Canvas,android期末考试选择题

知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结:

Android开发七大模块核心知识笔记

《960全网最全Android开发笔记》

Android自定义View之Canvas,android期末考试选择题

《379页Android开发面试宝典》

历时半年,我们整理了这份市面上最全面的安卓面试题解析大全
包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。

如何使用它?

1.可以通过目录索引直接翻看需要的知识点,查漏补缺。
2.五角星数表示面试问到的频率,代表重要推荐指数

Android自定义View之Canvas,android期末考试选择题

《507页Android开发相关源码解析》

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

举报

相关推荐

0 条评论