Animator本身并不一定要在主线程start,但是如果本身是ObjectAnimator改变view属性则一定要在主线程start。或者ValueAnimator.AnimatorUpdateListener的回调中想改变view属性,则回调后要在主线程操作view。
Android系统不会绘制完全不可见的view。但是会绘制部分可见view的整个view,不只是可见部分。
android.graphics.Matrix类
matrix.preXXX(参数)(参数本质上是另一个矩阵,通过相乘达到对当前bitmap的像素点矩阵scale、translate、rotate等目的,此方法是对bitmap像素矩阵前乘)
matrix.postXXX(参数)(参数本质上是另一个矩阵,通过相乘达到对当前bitmap的像素点矩阵scale、translate、rotate等目的,此方法是对bitmap像素矩阵后乘)
canvas.drawBitmap(bitmap,matrix,paint)
其实前两步并不会真正改变matrix,只是设置了matrix的矩阵计算方式,第三部的时候才会真正对矩阵做变换(相乘)。所以也就容易理解每一个preXX实际上最终都是当前基础上再次前置(调用顺序跟实际作用顺序正好相反,造成理解困难),postXX则是在当前基础上再次后置(调用顺序与实际作用顺序相同,这也是为什么大家都喜欢用postXXX)。preA;preB;postC;postD->BACD。而set方法则是直接设置参数矩阵会覆盖之前的计算方式,无论set哪一个属性都会覆盖之前所有属性。set之后的矩阵变化依然符合上述规则。所以matrix变换调用顺序和最终变换结果顺序可以简单总结为:遇到pre顺序会前置,遇到post顺序会后置,遇到set会覆盖。