Set the environment path of linux
环境变量配置文件
在Ubuntu中有如下几个文件可以设置环境变量
- 1、/etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。
- 2、/etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量。
- 3、~/.bash_profile:在登录时用到的第三个文件是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该 文件仅仅执行一次!默认情况下,他设置一些环境变游戏量,执行用户的.bashrc文件。/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
- 4、~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
以上文字来自:http://blog.csdn.net/xiaosu_521/archive/2008/03/09/2160458.aspx
比如要设置java jdk的环境变量:
JAVA_HOME=/usr/java/jdk1.6.0_21 #指定JAVA_HOME所指向的目录,即java jdk所在的目录
PATH=$JAVA_HOME/bin:$PATH #将JAVA_HOME添加到PATH环境变量中
CLASSPATH=.:$JAVA_HOME/lib #设置CLASSPATH所指向的目录
export JAVA_HOME PATH CLASSPATH
添加变量之后使用命令更新:
source /etc/profile
Using Animation in your application
PS:这个主题的日志标题居然不支持中文,懒得花时间去该,就用英文标题了
android大概有四种实现动画的方式:
1. GIF图片实现
2. Frame-by-frame (好像是通过AnimationDrawable类来实现,目前还没研究)
3. OpenGL ES (说到动画怎么能不提到OpenGL呢)
4. Tweened animation (通过xml文件配置动画效果,绑定到指定控件上,这篇日志所记录的方式)
添加动画资源
在res->anim目录下建立 anim.xml
这段xml代码定义了一个动画效果,alpha值从0到1,时间花费1000毫秒(即1秒)
将动画绑定到指定控件上
Animation fadeIn = AnimationUtils.loadAnimaition(R.anim.anim); // 比如有个TextView的控件,id为 title TextView title = (TextView)findViewById(R.id.title); // 指定控件的动画效果 title.setAnimation(fadeIn);
这样就简单得实现动画效果与控件的绑定。
取消动画效果与控件的绑定
title.clearAnimation();
指定动画效果的事件监听
动画的生命周期有三个: start, end, repeat
示例代码如下:
title.setAnimaitionListener(new AnimationListener(){ public void onAnimationEnd(Animation animation) { Intent intent = new Intent(mainActivity.this, ToActivity.class); startActivity(intent); mainActivity.this.finish(); } public void onAnimationRepeat(Animation animation) { // TODO Auto-generated method stub } public void onAnimationStart(Animation animation) { // TODO Auto-generated method stub } });
利用LayoutAnimationController指定一组控件的动画效果
LayoutAnimationController controller = new LayoutAnimationController(fadeIn); // 假设有个TableRow控件的ID为 row TableRow row = (TableRow)findViewById(R.id.row); row.setLayoutAnimation(controller);
通过setLayoutAnimation方法,我们就可以给TableRow下的所有元素设定同一个动画效果。有一个需要注意的地方,TableRow下的元素的效果并不是同一时间开始运行的。比如本日志的这个例子,定义动画的xml文件中,alpha节点的android:duration属性,指定整个动画效果执行所需要的时间,在这里我们设定了1000,那么,TableRow下的元素将会一个一个运行,间隔时间为android:duration的1/2(无论TableRow下有多少个空间,都是1/2),在这里就是0.5秒。比如TableRow下有两个控件,那么当第一个控件动画效果执行到0.5秒时,第二个控件才开始执行。所以,当所有控件的效果都运行完了之后,总共花时1.5秒。
其它
xml文件中的alpha节点还有一个经常会用到的属性android:startOffset,这个属性设定动画开始的时间,例如将这个属性值设为2000,动画将会在2秒之后执行。
创建android应用程序的偏好设定
创建应用程序设定
一款应用程序通常都需要存储一些基本的状态信息和用户数据,我们可以使用Android的Shared Preferences来实现这个功能。
在一个应用程序的所有activity中,我们都可以通过一个名称来访问Shared Preferences。因为这些设定信息是整个程序公用的,所以我们可以创建一个activity的子类(在这里举例为AppActivity),让程序中所有其他的activity继承AppActivity,我们在AppActivity中声明一个成员变量,用于标记Shared Preferencess的名称,这样一来在所有的activity中我们都可以统一地访问我们的Shared Preferencess。
// 在AppActivity中声明一个成员变量 public static final String APP_PREFERENCES = “APP_PREF”;
创建Shared preferences是没有数量限制的,所以你可以使用不同命名对应不同的类别,例如你可以分为应用设定(APP_PREFERENCES)和用户设定(USER_PREFERENCES),怎么组织Shared Preferences取决于你自己。
添加Shared Preferences到应用程序中,需要以下几个步骤:
1. 使用getSharedPreferences()方法获取一个SharedPreferences的实例
2. 创建一个SharedPreferences.Editor对象
3. 使用editor对象修改设定
4. 使用editor的commit()方法提交修改
存储特定的设定
Shared Preferences中的每个设定都是以键值对的形式存储的,值可以是以下这些类型:
. Boolean
. Float
. Integer
. Long
. String
当你决定好了要存储那些设定信息之后,你需要取得一个SharedPreferences实例并且使用Editior对象更新设定并提交修改。下面的例子中,存储了两个设定(用户名和年龄):
SharedPreferences settings = getSharedPreferences(APP_PREFERENCES , MODE_PRIVATE); SharedPreferences.Editor prefEditor = settings.edit(); prefEditor.putString(“UserName”, “JaneDoe”); prefEditor.putInt(“UserAge”, 22); prefEditor.commit();
我们还可以通过editor的clear()方法把设定清空,或者使用remove()方法,根据名称删除指定的设定。
获取应用的设定
获取Shared Preference的设定值比创建还要简单,你不需要editor对象。下面的示例展示了怎么样获取Shared Preference的设定:
SharedPreferences settings = getSharedPreferences(APP_PREFERENCES, MODE_PRIVATE); if (settings.contains(“UserName”) == true) { // 这样就可以获取key为 UserName的值了, getString()的第二个参数是当UserName没有值的时候作为默认值 String user = Settings.getString(“UserName”, “Default”); }
你可以使用SharedPreferences对象根据名称检测一个设定,获取一个强类型的设定或者 获取所有设定,通过使用map来存储他们。
Android开发中的单元测试
java开发好像大多都是以xml作为配置文件(php大多使用ini格式的文件),一开始真是有点不习惯,而且很多配置项给人糊里糊涂的感觉,目前只是处于复制粘贴,不知其所以然的水平。以下是在android开发中使用单元测试的配置项要点:
1.在AndroidManifest.xml中的application节点下添加如下节点:
<uses-library android:name="android.test.runner" />
2.在AndroidManifest.xml中的根节点(mainfest)下添加如下节点:
<instrucmentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="cn.sharp.action" //这个属性必须与单元测试用例class所在的package一致
android:label="Test for My App"/>
杂碎记录
1.限制输出格式为数字(整数或浮点数)的属性
android:numeric="integer|decimal"
2.字符串转浮点型
String s = "1.2";
float f = float.parseFloat(s);
3.java中浮点型转字符串
String str = ""+f;
结束语
终于开始认真学android开发了,入门还是不难的,加油!
java中的匿名类学习笔记
定义匿名类
在声明某个类的成员属性时,可以将匿名类的实例赋值给改成员变量,也可以在某个方法中,将匿名类实例作为方法返回值
case1: 赋值给类中成员变量
class Outer { public B bb = new B() { // B是匿名类的父类或者是一个接口 private int a = 1; private int b = 2; public function func(){ // do sth. } }; // 此处的分号一定要记得,因为这里是一条语句(表达式) }
case2:方法中返回匿名类的实例
class Outer { public B getAnoy(){ return new B() { // B是匿名类的父类或者是一个接口 private int a = 1; private int b = 2; public function func(){ // do sth. } }; // 此处的分号一定要记得,因为这里是一条语句(表达式) } }
向匿名函数父类的构造函数传递参数
//很简单,只要在声明匿名函数的时候传递 new B(1){ //声明匿名函数 }
方法中的匿名函数使用方法的参数
当方法的参数为final时,匿名函数才能使用该参数变量
class Outer { public B getAnony(final String param) { return new B() { private String paramHolder = param; // param必须为final } } }
匿名函数的构造函数
因为是匿名函数,那么就不可能有命名的构造函数,但是可以通过Instance initialization(实例初始化)来实现类似构造函数的效果
class Outer { public B getAnony() { return new B() { { System.out.println("初始化对象时调用") } //这样就可以实现构造函数的效果了 private int a = 1; } } }
匿名类与正常的类继承的不同
尽管匿名类可以实现某个接口,也可以扩展(extends)某个类,但是不能同时实现一个接口并扩展某个类。鱼与熊掌不能兼得。
Thinking In Java内部类中讲到匿名类时,通过匿名类巧妙地实现了工厂方法。
PHP和JAVA的不同之处
这里之记录一些java和php语法上的不同:
1.调用类成员数据的形式:
java:使用"."
php:使用"->"
2.for循环变量作用域的不同
java:
for(int i=0;i<10;i++){
// 变量i只在for循环中存在
}
php:
for($i=0;$i<10;$i++){
// 变量$i在for循环内和外都存在
}
3.在类内部掉哟个调用类成员或方法
php:
$this->name;
java:
可以省略this.直接调用name
4.switch在java中只能检查byte,char,short,int类型,php没有过多的限制
5.在类实例化时构造函数调用的区别
在java中,new一个子类的时候,会先调用父类的构造函数,
而php则不然,php不会调用父类的构造函数,只能使用parent::__construct()显式调用
