最近几周(20201009)Android项目遇到的问题总结

179 阅读3分钟

1 总结的Android中canvas 清屏的方式

在绘制之前,调用该方法,就能够实现清屏的效果。

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);

原理同xfermode类似,最长用的就是使用xfermode实现圆角图片,xfermode可以参看这个链接:

xfermode参考1

xfermode参考2


2 surfaceView 的使用

参看下面的链接:

surface使用

需要注意的点是在子线程 更新画布刷新速率 之间的配合。不能过快,也不能过慢。需要根据具体需求来进行设置,需要通过sleep time来配合。

举例1:

我们需要设置自定义属性动画,配合画布的更新。如果每次绘制的时间过长,就会使动画变的卡顿。

举例2:

每次绘制时,会判断一些标志位,根据标志位不同, 绘制不同的内容。所以绘制的时间可能会不同。我们需要动态判断是否需要绘制更新的内容。

3 线程中断的正确姿势

如题, 为什么废弃Thread的stop函数?我们怎么做才能安全的结束自定义子线程。下面这篇文章中都有介绍。线程中断的正确姿势


4 Android 图层详解与分析

在自定义view的过程中,经常会用到canvas layer的知识。下面这篇文章详细介绍了android canvas 图层的使用。

我是图层详解的链接


5 多指触控

需要注意的点:

1 多指触控发生的判断方法,以及按下抬起时的顺序。
2 缩放或者拖动时,距离的计算。以及缩放时的中心点的计算。
3 自己实现一遍才能更好的记忆😏。
4 拖动、旋转、缩放的转换一定要细心,否则极有可能出错。
5 调试的时候多打印日志,一看日志一目了然。

参考链接:

多指触控链接1

多指触控详细demo


6 System.gc()

要不要手动调用System.gc()? 调用的正确姿势是什么?

GC调用链接之一

GC调用链接至二


7 SurfaceView 设置透明背景,同时设置其他View在surface上层

如题,我尝试了网上列举的各种办法,没有同时实现上述两个需求。 但在 stackoverflow 上偶然看到了一个答案,可以尝试使用textureView 替换 SurfaceView。

替换很方便,surface 和 texture 的使用方式类似。 替换了之后,发现真的能同时实现上面两个需求。

surfaceView 参考链接

textureView 参考链接


8 在string.xml中的字符串中,两端插入空格.

尝试了转义字符\b,但是无效。我们通常的写法是下面这种。

<string name="demo_test">asdf</string>

尝试了下面这种办法,在字符串两遍加上双引号,同时在字符串两端加上空格。

<string name="demo_test">" asdf "</string>

发现可以解决问题,目前还没有发现适配的问题。


9 Matrix 类的使用.

Matrix 主要用到了 translate,rotate,scale,skew 四种操作。

skew 是错切,可以使图片倾斜,沿着某一个后者两个轴拉伸我们的图片。具体案例可以参考下面的链接。

与之对应的还有三种模式: pre, post, set.

pre 在队列最前面插入,post是在队列最后面添加,而set先清空队列再添加。具体的使用区别在下面链接2中可以看到对比效果。

Matrix 参考链接1

Matrix 参考链接2

Matrix 坐标变换参考

10 Canvas drawBitmap

canvas绘制图片的三个方法对比和参数解释

待续。。。