Code our life 日日行,不怕千万里;时时学,不怕千万卷

17八/100

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

31七/100

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


Tweened animation xml

Tweened animation 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秒之后执行。

31七/100

创建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来存储他们。

19七/100

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开发了,入门还是不难的,加油!

16七/100

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内部类中讲到匿名类时,通过匿名类巧妙地实现了工厂方法。

16十二/090

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()显式调用

标签: , 没有评论