‘壹’ android中的Matrix,以及set,pre和post的区别
Matrix包含一个3 X 3的矩阵,好空专门用于图像变换匹配。
Matrix提供了四种操前袜桥作:
translate(平移)
rotate(旋转)
scale(缩放)
skew(倾斜)
也就是说这4种操作都是对这个3 X 3的矩阵设值来达到变换的效果。
Matrix没有结构体,它必须被初始化,通过reset或set方法。
OK,Matrix介绍完了,我们来看看set、pre、post的区别。
pre是在队列最前面插入,post是在队列最后面追加,而set先清空队列在添加(这也是上文提到的“Matrix没有结构体,它必须被初始化,通过reset或set方法”的原因)。
下面通过一些例子具体说明:
matrix.preScale(2f,1f);
matrix.preTranslate(5f, 0f);
matrix.postScale(0.2f, 1f);
matrix.postTranslate(0.5f, 0f);
执行顺序:慧猛translate(5, 0) -> scale(2f, 1f) -> scale(0.2f, 1f) -> translate(0.5f, 0f)
matrix.postTranslate(2f, 0f);
matrix.preScale(0.2f, 1f);
matrix.setScale(1f, 1f);
matrix.postScale(5f, 1f);
matrix.preTranslate(0.5f, 0f);
执行顺序:translate(0.5f, 0f) -> scale(1f, 1f) -> scale(5f, 1)
‘贰’ 安卓手机系统里面的preinstall文件夹可以删除吗这个是系统文件夹。占了很大的空间。
System Lock Preinstall的简称,翻译成中文就是预安装系统的激活保护措施,它是微软与OEM厂商之间的一种协议。
果断完全删除。。。这是4.0底包的东西。是预装软件、
恢复出厂有这个文件夹,但是没有内容了。这个是预装程序。没多大意思。
‘叁’ Android中的Matrix,以及set,pre和post的区别
Matrix主要用于对平面进行平移(Translate),缩放(Scale),旋转(Rotate)以及斜切(Skew)操作。
为简化矩阵变换,Android封装了一系列方法来进行矩阵变换;其中包括:
set系列方法:梁档链setTranslate,setScale,setRotate,setSkew;设置,会覆盖之前的参数。
pre系列方法:preTranslate,preScale,preRotate,preSkew;矩阵先乘,如M' = M * T(dx, dy)。
post系列方法:postTranslate,postScale,postRotate,postSkew;矩阵后乘,如M' = T(dx, dy) * M。
通过将变换矩阵与原始矩阵相乘橡孙来达到变换的目的,例如:
平移(x'=x+tx;y'=y+ty):
缩放(x'=sx*x;y'=sy*y):
旋转(x'=cosβ*x-sinβ*y;y'=sinβ*x+cosβ*y):
选择需要用到如下的三角函数的公式:
①sin(α+β)=sinαcosβ+cosαsinβ
②cos(α+β)=cosαcosβ-sinαsinβ
公式①可以由单位圆方法或托蠢老勒密定理推导出来。
‘肆’ Android常见的预编译(prebuilt)
android常用的预编译方法(prebuilt)
1.framework引入静态jar包
2.编译共享jar包
3.编译so库
方法1 : 单独编译
方法2 : 轮询编译
4.预编译apk
预置apk至系统,如果apk含有so库的话,也需要提前编译到系统中,解压apk文件,将so提取出来放置某一文件夹中,通过LOCAL_PREBUILT_JNI_LIBS将so编译至system/app/package/lib/arm目录
‘伍’ 我编写完一个android程序,在编译时出现ava.lang.NullPointerException错误,是怎么回事
NullPointerException是空指针异常。
例如下面的代码:
String str = "这是一个测试用的字符串!";
System.out.println(str.length());
这段代码没有问题,但是如果改成下面的代码:
String str ;
System.out.println(str.length());
就会产生NullPointerException异常了