TranslateAnimation动画结束后的位置问题

今天在使用TranslateAnimation位移一个LinearLayout时,发现动画完成后又会自动回到初始的状态,设置了fillAfter也不太管用。

仔细研究了一下,发现这种现象很正常,因为TranslateAnimation只负责实现位移动画效果,并不会真正的改变LinearLayout的位置,所以需要加一个AnimationListener ,在动画结束(onAnimationEnd() )后,通过设置LayoutParam里相关属性来改变LinearLayout位置才行。

具体的Margin的数值,根据实际需要进行调整即可。也可以直接设置控件的起始X,Y坐标即可。

参考链接:Android: 解决动画完成后位置恢复到初始位置的问题

Android系统证书platform.x509.pem,platform.pk8转换为.keystore文件

概述


我们在进行Android开发的时候,如果开发的是系统应用,都需要系统的签名才能正常运行。而系统应用一般是把代码统一放到系统代码库中跟随系统一起编译。而如果我们想用Android Studio单独开发某个应用而使用系统签名的时候,有两种开发的方式,一种是编译完成后,使用SignApk.jar来进行签名,另外一种是把系统的platform.x509.pem platform.pk8 转换成为Android Studio常用的.keystore文件,编译时候自动签名。

Android系统签名证书的目录是“build/target/product/security”。

SignApk.jar签名


命令行中使用SignApk.jar签名的方式如下:

转换为.keystore文件


使用keytool-importkeypair本站下载)进行转换,转换命令如下:

Android Studio中使用证书:

Android Studio中使用SystemProperties

概述


Android的系统属性相当于Windows的注册表,由key和value组成,且都是核心系统的一个基本机制。相对于Windows的注册表,Android的系统属性要简单一些,它没有Windows注册表的树状结构,而只是一个列表,也就是说没有父子关系。value有string,int,long,boolean,但是设置只能通过字符串方式。

读取系统属性,是通过SystemProperties类来实现的。SystemProperties在android.os下,但这个类是隐藏的,上层程序开发无法直接使用。要使用这个类,有两种方法。一个是导入layoutlib.jar,另外一种是通过反射的方式调用。

导入layoutlib.jar


我们只介绍一下如何在Android Studio中导入的方式
在gradle配置文件中,写一个函数,动态获取layoutlib.jar路径,然后加到dependencies中即可,代码如下:

导入之后,直接

就可以正常使用了。
注意:引入的layoutlib.jar并不会编译到APK包里面,因此不需要担心增加最终的APK的大小的情况。

反射调用


对于不想引入layoutlib.jar的情况,可以直接使用下面的反射类来实现调用。

参考链接


Android Studio 中如何引入 layoutlib.jar?