摘要:
tombstone文件包含了发生问题的进程ID信息 I/DEBUG ( 241): pid: 244, tid: 244, name: mediaserver >>> /system/bin/mediaserver <<< 当 tid == pid 时,问题发生在父进程,反之问题发生在子进程,从上面 阅读全文
摘要:
布局过程,就是程序在运行时利用布局文件的代码来计算出实际尺寸的过程。 布局分为两个阶段:测量阶段和布局阶段。 测量阶段:从上到下递归地调用每个 View 或者 ViewGroup 的 measure() 方法,测量他们的尺寸并计算它们的位置; 布局阶段:从上到下递归地调用每个 View 或者 Vie 阅读全文
摘要:
在 Android 里,硬件加速专指把 View 中绘制的计算工作交给 GPU 来处理。 进一步地再明确一下,这个「绘制的计算工作」指的就是把绘制方法中的那些 Canvas.drawXXX() 变成实际的像素这件事。 在硬件加速关闭的时候,Canvas 绘制的工作方式是: 把要绘制的内容写进一个 B 阅读全文
摘要:
如果要多个动画配合工作,需要把他们放入AnimatorSet中 使用 playSequentially(),就可以让两个动画依次播放,而不用为它们设置监听器来手动为他们监管协作。 使用playTogether(),就可以让两个动画同时播放 还可以用play with/before/after这种形式 阅读全文
摘要:
很多时候,你在同一个动画中会需要改变多个属性,例如在改变透明度的同时改变尺寸。 如果使用 ViewPropertyAnimator,你可以直接用连写的方式来在一个动画中同时改变多个属性: 而对于 ObjectAnimator,是不能这么用的。不过你可以使用 PropertyValuesHolder 阅读全文
摘要:
ViewPropertyAnimation 使用方式:View.animate() 后跟 translationX() 等方法,动画会自动执行。 注意translationX实现是调用对应的set方法而不是直接给该名字的属性赋值,必须提供set方法才能生效 animate后面具体可以跟的方法以及方法 阅读全文
摘要:
Canvas的几何变换是倒序的,Matrix是正序。 比如先平移在旋转: canvas.rotate(); canvas.translate(); //translate先执行,rotate后执行 Matrix里面就好比维护者一个双端队列,当调用preXxx方法时,将该方法放入队列的顶端,(即每来一 阅读全文
摘要:
1.写在 super.onDraw() 的下面 把绘制代码写在 super.onDraw() 的下面,由于绘制代码会在原有内容绘制结束之后才执行,所以绘制内容就会盖住控件原来的内容。 2.写在 super.onDraw() 的上面 如果把绘制代码写在 super.onDraw() 的上面,由于绘制代 阅读全文
摘要:
范围裁切 clipRect() clipPath() 和clipRect一样,不过是把坐标换成了path,可以实现更多形状裁切 几何变换 几何变换大概包括三类 1.使用 Canvas 来做常见的二维变换; 2.使用 Matrix 来做常见和不常见的二维变换; 3.使用 Camera 来做三维变换 C 阅读全文
摘要:
drawText(String text, float x, float y, Paint paint) x,y是基于文字基本线的,而不是android坐标系的左上角。 使用staticLayout进行文字换行,它既可以为文字设置宽度上限来让文字自动换行,也会在 \n 处主动换行 例子: 效果: S 阅读全文