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);