Android开发笔记 二

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);
原文地址:https://www.cnblogs.com/jjxxjnzy/p/3665669.html