在activity的xml布局文件中,最外层的布局我们在java文件里要用到,所以在那个布局中,我们要加上id。举个例子,我在测试程序中的最外层布局是LinearLayout,它的id是android:id="@+id/test",在我们的Activity里我们需要定义的变量有:
privateLinearLayout mTestATActivityView;//最外层的布局文件
privateSharedPreferences preferences;//数据保存
privatestaticfinalString PREFERENCES_ID="wallperSettings";
privatestaticfinalString WALLPER_SETTINGS=”cs2c.wallper.setting”; //用户没有进行恢复默认设置
privatestaticbooleanisSystemWallperSettings=false;
在onCreate里:
mTestATActivityView=(LinearLayout)findViewById(R.id.test);
在onResume里:
preferences=getSharedPreferences(PREFERENCES_ID,0);
isSystemWallperSettings=preferences.getBoolean(WALLPER_SETTINGS,false);
//设置壁纸
if(isSystemWallperSettings){
mTestATActivityView.setBackgroundDrawable(this.getResources().getDraw able(R.drawable.background));
}else{
mTestATActivityView.setBackgroundDrawable(getWallpaper());
}
之所以要放在onResume里,是考虑到Activity的生命周期,当我们home键退回桌面进行设置壁纸的时候,再进入程序,我们的程序背景可能没有改动。
以上都是要在我们的Activity进行处理的。
在设置里,当用户点击恢复默认背景的时候,我们的处理是这样的:
//这个preferences同样是一个变量,我们要自己定义。
SharedPreferences.Editoreditor = preferences.edit();
editor.putBoolean(WALLPER_SETTINGS,true);
editor.commit();
终端:sudo gedit /etc/profile
#set java environment
JAVA_HOME=/home/jojo/Develop/jdk1.7.0_09export JRE_HOME=/home/jojo/Develop/jdk1.7.0_09/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
保存之后重启电脑即可!
在matrix 中的一些函数 preScale,postScale,preTranslate,postTranslate 等的记录。
matrix.preScale(0.5f, 1); matrix.preTranslate(10, 0); matrix.postScale(0.7f, 1); matrix.postTranslate(15, 0);
我们在代码中实际调用的过程是
preSacle--->preTranslate--->postScale--->postTranslate但是系统实际调用的过程是:
preTranslate--->preSacle--->postScale--->postTranslate
其实,无论你调用的顺序是什么样,最终的执行结果都是 preTranslate--->preSacle--->postScale--->postTranslate 这的顺序。
所以,preTranslate是指在setScale前平移,postTranslate是指在setScale后平移(和调用的顺序无关)。
matrix 的setXXX方法会对之前调用preXXX和postXXX进行清空操作,之前的设置将会无效,之后才会有效。
比如:
matrix.preScale(0.5f, 1); matrix.postTranslate(10, 0); matrix.setScale(1, 0.6f); matrix.postScale(0.7f, 1); matrix.preTranslate(15, 0);
preTranslate--->setScale--->postScale。因为setScale会清空matrx之前的设置。
同时, Canvas里scale, translate, rotate, concat方法都是pre方法,如果要进行更多的变换可以先从Canvas获得matrix, 变换后再设置回Canvas.,已达到我们想要的效果。