Activity切换动画的实现
在这里因为项目的需要实现了Activity的淡入淡出动画,具体实现的步骤如下:
首先在anim目录下写好自己的动画xml文件
1 <?xml version="1.0" encoding="utf-8"?>
2 <set xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shareInterpolator="false">
4 <alpha
5 android:fromAlpha="0"
6 android:toAlpha="1"
7 android:duration="1500"
8 />
9 </set>
这个是新的Activity进入的动画,它的透明度从0变化到1,执行时间为1.5秒,接下里看看退出动画
1 <?xml version="1.0" encoding="utf-8"?>
2 <set xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shareInterpolator="false">
4 <alpha
5 android:fromAlpha="1.0"
6 android:toAlpha="0"
7 android:duration="1500"
8 />
9 </set>
这个是Activity退出的动画,它的透明度从1变化到0,执行时间为1.5s。
上面的set中有个shareInterpolator的字段,这个主要是用来定义动画变化速率的。
写完了这两个文件,那我们看看如何使用这两个文件:
1 startActivity(intent);
2 overridePendingTransition(R.anim.enter_alpha, R.anim.exit_alpha);
在这里我们需要调用它的overridePendingTransition方法来加载我们自己的动画,需要注意的是这个方法要在调用startActivity之后在调用。
android中接收Receiver
在android中,我主要使用了两种Receiver,一种是接受系统广播,如系统开机广播,插入新的输入设备等,还有一种就是在程序内部使用Receiver
我们先看看怎么接受系统的开机广播:
首先我们需要继承BroadcastReceiver实现我们自己的接收器,我的简单代码如下:
1 class TestBroadcast extends BroadcastReceiver
2 {
3
4 @Override
5 public void onReceive(Context context, Intent intent) {
6 // TODO Auto-generated method stub
7 if(intent.ACTION_BOOT_COMPLETED.equals(intent.getAction()))
8 {
9 //系统开机
10 }else if(USB_ACTION.equals(intent.getAction()))
11 {
12 //插入新的USB输入设备
13 }
14
15 }
16
17 }
18
写完我们自己的Receiver之后,我们需要在AndroidManifest.xml中注册我们自己的Receiver,否则是没有办法是用的
1 <receiver
2 android:name="com.example.test.TestBroadcast"
3 >
4 <intent-filter>
5 <action android:name="android.intent.action.BOOT_COMPLETED" ></action>
6 <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/>
7 </intent-filter>
8 </receiver>
在这里就把我们的Receiver注册到了系统,intent-filter字段是注册了我们感兴趣的事件,在这里是系统开机和USB输入设备的插入,在这里加上之后我们还需要声明一下我们所需要的权限,在application字段之前声明我们的权限:
1 <uses-feature android:name="android.hardware.usb.host"/>
2 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>"
这个时候我们就把Receiver注册到系统里了,系统开机就会调用我们自己的Receiver了。在这里我们看一下怎么取出系统Receiver中所附带的数据,以USB输入设备为例:
1 UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
系统在发出广播的时候会附带一个intent,我们可以从intent取出其附带的数据
系统内部Receiver的使用
在内部程序单独使用的Receiver就不用到AndroidManifest.xm中注册了,我们可以直接在程序内部继承BroadcastReceiver来实现消息的传递,以为为简单的示例:
1 class MyReceiver extends BroadcastReceiver
2 {
3
4 @Override
5 public void onReceive(Context context, Intent intent) {
6 }
7 }
我们只要在代码的把它注册上去就可以了,
1 MyReceiver myReceiver = new MyReceiver();
2 IntentFilter filter = new IntentFilter();
3 filter.addAction("test");
4 registerReceiver(myReceiver, filter);
如果我们在程序内部的其他地方发送消息就可以调用这个Receiver了
1 Intent receiverIntent = new Intent();
2 receiverIntent.setAction(NEW_DEVICE);
3 context.sendBroadcast(receiverIntent);