如需转载请评论或简信,并注明出处,未经允许不得转载
前言
现在的app的ui交互效果越来越复杂,很多android开发工程师,每次ui交互评审的时候最常说的几句话就是”这个不行“、”这个做不到“、”做这个可能需要花很久“。为什么会出现这个现象呢,其实就是因为我们对自定义View不是非常熟练。那为什么会对自定义View不熟悉呢?可能是大部分android开发工程师平时以写业务居多,而自定义View涉及到的API非常多,记不熟也是非常正常的(其实我自己就是属于这类人)。所以最近看到抛物线老师的自定义View系列文章,觉得写的很不错,于是跟着文章,写了一个Demo,汇总了几乎所有常用的自定义View相关的API以及他们的使用方式和使用效果。为什么要写这个Demo呢,一方面是巩固自己的学习成果,另一方面是觉得一个复杂的自定义View,实际上都可以拆分成一个个小的组成部分,当这些小的组成部分都被你掌握了,你就不觉得自定义View有多么难了
项目地址
https://github.com/Geekholt/Practice-CustomView/tree/master
APK下载地址
https://github.com/Geekholt/Practice-CustomView/blob/master/app-debug.apk
绘制基础
涂颜色 drawColor
画圆 drawCircle
画矩形 drawRect
画点 drawPoint
画椭圆 drawOval
画直线 drawLine
画圆角矩形 drawRoundRect
画弧形和扇形 drawArc
画心形 drawPath
画直方图
画饼图
Paint详解
线性渐变着色器 LinearGradient
辐射渐变着色器 RadialGradient
扫描渐变着色器 SweepGradient
Bitmap着色器 BitmapShader
混合着色器 ComposeShader
颜色过滤 LightingColorFilter
去除饱和度 ColorMatrixColorFilter
图像混合 Xfermode
线头形状 setStrokeCap
拐角形状 setStrokeJoin
拐角的延长线的最大值 setStrokeMiter
图形的轮廓效果 setPathEffect
阴影 setShadowLayer
模糊效果 setMaskFilter
获取实际path FillPath
获取实际path TextPath
文字绘制
基础文字 drawText
文字换行 StaticLayout
设置文字大小 setTextSize
设置字体 setTypeface
字体加粗 setFakeBoldText
字体删除线 setStrikeThruText
字体下划线 setUnderlineText
文字倾斜 setTextSkewX
文字宽度 setTextScaleX
对齐方式 setTextAlign
获取推荐的行距 getFontSpacing
测量文字宽度 measureText
文字居中对齐 getTextBounds
文字基于baseline对齐 FontMetrics
范围裁切和几何变换
区域裁剪 canvas.clipRect
路径裁剪 canvas.clipPath
普通平移 canvas.translate
普通缩放 canvas.scale
普通旋转 canvas.rotate
普通错切 canvas.skew
matrix平移 matrix.postTranslate
matrix缩放 matrix.postScale
matrix旋转 matrix.postRotate
matrix错切 matrix.postSkew
camera三维旋转默认原点为轴心 camera.rotateX
camera三维旋转设置轴心 canvas.translate、matrix.preTranslate、matrix.postTranslate
camera三维旋转设置轴心+相机位置 camera.setLocation
camera折叠
属性动画基础
位移动画 view.animate().translationX
旋转动画 view.animate().rotationX
放大动画 view.animate().scaleX
透明度动画 view.animate().alpha
组合动画 imageView.animate().scaleX(1.5f).scaleY(1.5f).alpha(1f).translationX(400f)
设置动画时间 setDuration
插值器 setInterpolator
ObjectAnimator
属性动画进阶
颜色估值器 ArgbEvaluator
自定义颜色估值器 TypeEvaluator
自定义对象类型估值器 ObjectAnimator.ofObject
组合动画 PropertyValuesHolder
组合动画协作执行 AnimatorSet
关键帧 Keyframe