Android_学习笔记_第1页
Android_学习笔记_第2页
Android_学习笔记_第3页
Android_学习笔记_第4页
Android_学习笔记_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android Activity 和和 Intent 机制学习笔记机制学习笔记 Activity Android 中 Activity 是所有程序的根本 所有程序的流程都运行在 Activity 之中 Activity 具有自己 的生命周期 见 控制生命周期 程序无法改变 但可以用 onSaveInstanceState 保存其状态 对于 Activity 关键是其生命周期生命周期的把握 如下图 其次就是状态的保存和恢复 onSaveInstanceState onRestoreInstanceState 以及 Activity 之间的跳转和数据传输 intent Activity 中常用的函数有 SetContentView findViewById finish startActivity 其生命周期涉及的函数有 void onCreate Bundle savedInstanceState void onStart void onRestart void onResume void onPause void onStop void onDestroy 注意的是 注意的是 Activity 的使用需要在的使用需要在 Manifest 文件中添加相应的文件中添加相应的 并设置其属性和 并设置其属性和 intent filter Intent Android 中提供了 Intent 机制来协助应用间的交互与通讯 Intent 负责对应用中一次操作的动作 动作 涉及数据 附加数据进行描述 Android 则根据此 Intent 的描述 负责找到对应的组件 将 Intent 传 递给调用的组件 并完成组件的调用 Intent 不仅可用于应用程序之间 也可用于应用程序内部的 Activity Service 之间的交互 因此 Intent 在这里起着一个媒体中介的作用 专门提供组件互相调用 的相关信息 实现调用者与被调用者之间的解耦 在 SDK 中给出了 Intent 作用的表现形式为 通过 Context startActivity orActivity startActivityForResult 启动一个 Activity 通过 Context startService 启动一个服务 或者通过 Context bindService 和后 台服务交互 通过广播方法 比如 Context sendBroadcast Context sendOrderedBroadcast Context sendStickyBroadcast 发给 broadcast receivers Intent 属性的设置属性的设置 包括以下几点 以下为 XML 中定义 当然也可以通过 Intent 类的方法来获取和 设置 1 Action 也就是要执行的动作 SDk 中定义了一些标准的动作 包括 onstant Target component Action ACTION CALLactivityInitiate a phone call ACTION EDITactivityDisplay data for the user to edit ACTION MAINactivity Start up as the initial activity of a task with no data input and no returned output ACTION SYNCactivity Synchronize data on a server with data on the mobile device ACTION BATTERY LOW broadcast receiver A warning that the battery is low ACTION HEADSET PLUG broadcast receiver A headset has been plugged into the device or unplugged from it ACTION SCREEN ONbroadcast The screen has been turned on receiver ACTION TIMEZONE CHANGED broadcast receiver The setting for the time zone has changed 当然 也可以自定义动作 自定义的动作在使用时 需要加上包名作为前缀 如 com example project SHOW COLOR 并可定义相应的 Activity 来处理我们的自定义动作 2 Data 也就是执行动作要操作的数据 Android 中采用指向数据的一个 URI 来表示 如在联系人应用中 一个指向某联系人的 URI 可能为 content contacts 1 对于不同的动作 其 URI 数据的类型是不同的 可以设置 type 属性指定特定 类型数据 如 ACTION EDIT 指定 Data 为文件 URI 打电话为 tel URI 访问网络为 http URI 而 由 content provider 提供的数据则为 content URIs 3 type 数据类型 显式指定 Intent 的数据类型 MIME 一般 Intent 的数据类型能够根据数 据本身进行判定 但是通过设置这个属性 可以强制采用显式指定的类型而不再进行推导 4 category 类别 被执行动作的附加信息 例如 LAUNCHER CATEGORY 表示 Intent 的接 受者应该在 Launcher 中作为顶级应用出现 而 ALTERNATIVE CATEGORY 表示当前的 Intent 是一 系列的可选动作中的一个 这些动作可以在同一块数据上执行 还有其他的为 ConstantMeaning CATEGORY BROWSABLE The target activity can be safely invoked by the browser to display data referenced by a link for example an image or an e mail message CATEGORY GADGET The activity can be embedded inside of another activity that hosts gadgets CATEGORY HOME The activity displays the home screen the first screen the user sees when the device is turned on or when the HOME key is pressed CATEGORY LAUNCHER The activity can be the initial activity of a task and is listed in the top level application launcher CATEGORY PREFERENCE The target activity is a preference panel 5 component 组件 指定 Intent 的的目标组件的类名称 通常 Android 会根据 Intent 中包含的其它属性的信息 比如 action data type category 进行查找 最终找到一个与之匹 配的目标组件 但是 如果 component 这个属性有指定的话 将直接使用它指定的组件 而 不再执行上述查找过程 指定了这个属性以后 Intent 的其它所有属性都是可选的 6 extras 附加信息 是其它所有附加信息的集合 使用 extras 可以为组件提供扩展信息 比如 如果要执行 发送电子邮件 这个动作 可以将电子邮件的标题 正文等保存在 extras 里 传给电子邮件发送组件 理解 Intent 的关键之一是理解清楚 Intent 的两种基本用法 一种是显式的显式的 Intent 即在构造 Intent 对象时就指定接收者 另一种是隐式的隐式的 Intent 即 Intent 的发送者在构造 Intent 对象时 并不知道也不关心接收者是谁 有利于降低发送者和接收者之间的耦合 对于显式 Intent Android 不需要去做解析 因为目标组件已经很明确 Android 需要解析的是 那些隐式 Intent 通过解析 将 Intent 映射给可以处理此 Intent 的 Activity IntentReceiver 或 Service Intent 解析机制主要是通过查找已注册在 AndroidManifest xml 中的所有 IntentFilter 及其中定 义的 Intent 最终找到匹配的 Intent 在这个解析过程中 Android 是通过 Intent 的 action type category 这三个属性来进行判断的 判断方法如下 如果 Intent 指明定了 action 则目标组件的 IntentFilter 的 action 列表中就必须包 含有这个 action 否则不能匹配 如果 Intent 没有提供 type 系统将从 data 中得到数据类型 和 action 一样 目 标组件的数据类型列表中必须包含 Intent 的数据类型 否则不能匹配 如果 Intent 中的数据不是 content 类型的 URI 而且 Intent 也没有明确指定它的 type 将根据 Intent 中数据的 scheme 比如 http 或者 mailto 进行匹配 同上 Intent 的 scheme 必须出现在目标组件的 scheme 列表中 如果 Intent 指定了一个或多个 category 这些类别必须全部全部出现在组建的类别列 表中 比如 Intent 中包含了两个类别 LAUNCHER CATEGORY 和 ALTERNATIVE CATEGORY 解析得到的目标组件必须至少包含这两个类别 Intent Filter 的定义的定义 一些属性设置的例子 完整的实例 Intent 用法实例用法实例 1 无参数无参数 Activity 跳转跳转 Intent it new Intent Activity Main this Activity2 class startActivity it 2 向下一个向下一个 Activity 传递数据 使用传递数据 使用 Bundle 和和 Intent putExtras Intent it new Intent Activity Main this Activity2 class Bundle bundle new Bundle bundle putString name This is from MainActivity it putExtras bundle it putExtra test shuju startActivity it startActivityForResult it REQUEST CODE 对于数据的获取可以采用 对于数据的获取可以采用 Bundle bundle getIntent getExtras String name bundle getString name 3 向上一个向上一个 Activity 返回结果 使用返回结果 使用 setResult 针对 针对 startActivityForResult it REQUEST CODE 启动的启动的 Activity Intent intent getIntent Bundle bundle2 new Bundle bundle2 putString name This is from ShowMsg intent putExtras bundle2 setResult RESULT OK intent 4 回调上一个回调上一个 Activity 的结果处理函数 的结果处理函数 onActivityResult Override protected void onActivityResult int requestCode int resultCode Intent data TODO Auto generated method stub super onActivityResult requestCode resultCode data if requestCode REQUEST CODE if resultCode RESULT CANCELED setTitle cancle else if resultCode RESULT OK String temp null Bundle bundle data getExtras if bundle null temp bundle getString name setTitle temp 下面是转载来的其他的一些下面是转载来的其他的一些 Intent 用法实例 转自用法实例 转自 javaeye 显示网页显示网页 1 Uri uri Uri parse 2 Intent it new Intent Intent ACTION VIEW uri 3 startActivity it 显示地图显示地图 1 Uri uri Uri parse geo 38 899533 77 036476 2 Intent it new Intent Intent ACTION VIEW uri 3 startActivity it 4 其他 geo URI 範例 5 geo latitude longitude 6 geo latitude longitude z zoom 7 geo 0 0 q my street address 8 geo 0 0 q business near city 9 google streetview cbll lat lng 2 Intent it new Intent Intent ACTION VIEW uri 3 startActivity it 4 where startLat startLng endLat endLng are a long with 6 decimals like 50 123456 打电话打电话 1 叫出拨号程序叫出拨号程序 2 Uri uri Uri parse tel 0800000123 3 Intent it new Intent Intent ACTION DIAL uri 4 startActivity it 1 直接打电话出去直接打电话出去 2 Uri uri Uri parse tel 0800000123 3 Intent it new Intent Intent ACTION CALL uri 4 startActivity it 5 用這個 要在 AndroidManifest xml 中 加上 6 传送传送 SMS MMS 1 调用短信程序调用短信程序 2 Intent it new Intent Intent ACTION VIEW uri 3 it putExtra sms body The SMS text 4 it setType vnd android dir mms sms 5 startActivity it 1 传送消息传送消息 2 Uri uri Uri parse smsto 0800000123 3 Intent it new Intent Intent ACTION SENDTO uri 4 it putExtra sms body The SMS text 5 startActivity it 1 传送传送 MMS 2 Uri uri Uri parse content media external images media 23 3 Intent it new Intent Intent ACTION SEND 4 it putExtra sms body some text 5 it putExtra Intent EXTRA STREAM uri 6 it setType image png 7 startActivity it 传送传送 Email 1 Uri uri Uri parse mailto xxx 2 Intent it new Intent Intent ACTION SENDTO uri 3 startActivity it 1 Intent it new Intent Intent ACTION SEND 2 it putExtra Intent EXTRA EMAIL me 3 it putExtra Intent EXTRA TEXT The email body text 4 it setType text plain 5 startActivity Intent createChooser it Choose Email Client 1 Intent it new Intent Intent ACTION SEND 2 String tos me 3 String ccs you 4 it putExtra Intent EXTRA EMAIL tos 5 it putExtra Intent EXTRA CC ccs 6 it putExtra Intent EXTRA TEXT The email body text 7 it putExtra Intent EXTRA SUBJECT The email subject text 8 it setType message rfc822 9 startActivity Intent createChooser it Choose Email Client 1 传送附件 2 Intent it new Intent Intent ACTION SEND 3 it putExtra Intent EXTRA SUBJECT The email subject text 4 it putExtra Intent EXTRA STREAM file sdcard mysong mp3 5 sendIntent setType audio mp3 6 startActivity Intent createChooser it Choose Email Client 播放多媒体播放多媒体 Uri uri Uri parse file sdcard song mp3 Intent it new Intent Intent ACTION VIEW uri it setType audio mp3 startActivity it Uri uri Uri withAppendedPath MediaStore Audio Media INTERNAL CONTENT URI 1 Intent it new Intent Intent ACTION VIEW uri startActivity it Market 相关相关 1 寻找某个应用 2 Uri uri Uri parse market search q pname pkg name 3 Intent it new Intent Intent ACTION VIEW uri 4 startActivity it 5 where pkg name is the full package path for an application 1 显示某个应用的相关信息 2 Uri uri Uri parse market details id app id 3 Intent it new Intent Intent ACTION VIEW uri 4 startActivity it 5 where app id is the application ID find the ID 6 by clicking on your application on Market home 7 page and notice the ID from the address bar Uninstall 应用程序应用程序 1 Uri uri Uri fromParts package strPackageName null 2 Intent it new Intent Intent ACTION DELETE uri 3 startActivity it Android 数字签名学习笔记数字签名学习笔记 在 Android 系统中 所有安装到系统的应用程序都必有一个数字证书 此数字证书用于 标识应用程序的作者和在应用程序之间建立信任关系 如果一个 permission 的 protectionLevel 为 signature 那么就只有那些跟该 permission 所在的程序拥有同一个数 字证书的应用程序才能取得该权限 Android 使用 Java 的数字证书相关的机制来给 apk 加盖 数字证书 要理解 android 的数字证书 需要先了解以下数字证书的概念和 java 的数字证书 机制 Android 系统要求每一个安装进系统的应用程序都是经过数字证书签名的 数字证书的 私钥则保存在程序开发者的手中 Android 将数字证书用来标识应用程序的作者和在应用程序 之间建立信任关系 不是用来决定最终用户可以安装哪些应用程序 这个数字证书并不需要权 威的数字证书签名机构认证 它只是用来让应用程序包自我认证的 同一个开发者的多个程序尽可能使用同一个数字证书同一个开发者的多个程序尽可能使用同一个数字证书 这可以带来以下好处 1 有利于程序升级 当新版程序和旧版程序的数字证书相同时 Android 系统才会认为这两 个程序是同一个程序的不同版本 如果新版程序和旧版程序的数字证书不相同 则 Android 系 统认为他们是不同的程序 并产生冲突 会要求新程序更改包名 2 有利于程序的模块化设计和开发 Android 系统允许拥有同一个数字签名的程序运行在一 个进程中 Android 程序会将他们视为同一个程序 所以开发者可以将自己的程序分模块开发 而用户只需要在需要的时候下载适当的模块 3 可以通过权限 permission 的方式在多个程序间共享数据和代码 Android 提供了基于数 字证书的权限赋予机制 应用程序可以和其他的程序共享概功能或者数据给那那些与自己拥有 相同数字证书的程序 如果某个权限 permission 的 protectionLevel 是 signature 则这个 权限就只能授予那些跟该权限所在的包拥有同一个数字证书的程序 在签名时 需要考虑数字证书的有效期证书的有效期 1 数字证书的有效期要包含程序的预计生命周期 一旦数字证书失效 持有改数字证书的程 序将不能正常升级 2 如果多个程序使用同一个数字证书 则该数字证书的有效期要包含所有程序的预计生命周 期 3 Android Market 强制要求所有应用程序数字证书的有效期要持续到 2033 年 10 月 22 日 以后 Android 数字证书包含以下几个要点 数字证书包含以下几个要点 1 所有的应用程序都必须有数字证书所有的应用程序都必须有数字证书 Android 系统不会安装一个没有数字证书 的应用程序 2 Android 程序包使用的数字证书可以是自签名的自签名的 不需要一个权威的数字证书 机构签名认证 3 如果要正式发布一个如果要正式发布一个 Android 必须使用一个合适的私钥生成的数字证书来 必须使用一个合适的私钥生成的数字证书来 给程序签名给程序签名 而不能使用 adt 插件或者 ant 工具生成的调试证书来发布 4 数字证书都是有有效期有效期的 Android 只是在应用程序安装的时候才会检查证书 的有效期 如果程序已经安装在系统中 即使证书过期也不会影响程序的正常功能 5 Android 使用标准的 java 工具 Keytool and Jarsigner 来生成数字证书 并给应用程序包签名 6 使用 zipalign 优化程序 Android 系统不会安装运行任何一款未经数字签名的 apk 程序 无论是在模拟器上还是在实际 的物理设备上 Android 的开发工具 ADT 插件和 Ant 都可以协助开发者给 apk 程序签名 它们都有两种模式 调试模式 debug mode 和发布模式 release mode 在调试模式下 android 的开发工具会在每次编译时使用调试用的数字证书给程序签名 开发 者无须关心 当要发布程序时 开发者就需要使用自己的数字证书给 apk 包签名 可以有两种方法 1 在命令行下使用 JDK 中的和 Keytool 用于生成数字证书 和 Jarsigner 用于使用数字证书 签名 来给 apk 包签名 2 使用 ADT Export Wizard 进行签名 如果没有数字证书可能需要生成数字证书 使用使用 Keytool 和和 Jarsigner 给程序签名给程序签名 命令 keytool genkey v keystore android keystore alias android keyalg RSA validity 20000 该命令中 keystore ophone keystore 表示生成的证书 可以加上路径 默认在用户主目 录下 alias ophone 表示证书的别名是 ophone keyalg RSA 表示采用的 RSA 算法 validity 20000 表示证书的有效期是 20000 天 此时 我们会在互用主目录下看到 ophone keystore 即我们刚刚创建的证书 接着对程序进行签名 jarsigner 用法用法 选项 jar 文件别名 jarsigner verify 选项 jar 文件 执行 jarsigner verbose keystore android keystore signedjar android123 signed apk android123 apk android 就可以生成签名的 apk 文件 这里输入文件 android123 apk 最终生成 android123 signed apk 为 Android 签名后的 APK 执行文件 下面提示输入的密码和 keytool 输入的一样就行了 不过在我的 JDK 目录 下没有找到 jarsigner 这个程序 不知道是怎么回事 使用使用 ADT Export Wizard 进行签名进行签名 应用程序 apk 签名 在 EC 中 右键单击应用程序工程 如图选择 选择证书的存放路径 填写相关资料 完成 即可生成被签名的 apk 文件 如下图所示 如上图所示 我们可以看到也可以在这里选择 Create new keystore 来创建一个证书 输入 密码 点击下一步 填写相关信息 如下图所示 使用使用 zipalign 优化优化 APK 根据官方文档的描述 Android 系统中 Application 的数据都保存在它的 APK 文件中 同时 可以被多个进程访问 安装的过程包括如下几个步骤 Installer 通过每个 apk 的 manifest 文件获取与当前应用程序相关联的 permissions 信息 Home application 读取当前 APK 的 Name 和 Icon 等信息 System server 将读取一些与 Application 运行相关信息 例如 获取和处理 Application 的 notifications 请求等 最后 APK 所包含的内容不仅限于当前 Application 所使用 而且可以被其它的 Application 调用 提高系统资源的可复用性 zipalign 优化的最根本目的是帮助操作系统更高效率的根据请求索引资源 将 resource handling code 统一将 Data structure alignment 数 据结构对齐标准 SA 限定为 4 byte boundaries 如果不采取对齐的标 准 处理器无法准确和快速的在内存地址中定位相 关资源 目前的系统中使用 fallback mechanism 机制处理那些没有应用 DSA 标准的应用程 序 这的确大大的方便了普通开发者无需关注繁琐的内存操作问题 但是相反 对于这样的应 用程序 将给普通用户带来一定的麻烦 不但影响程序的运行的效率 而且使系统的整体执行效 率下降和占用大量不必要的内存资源 甚至消耗一定的电池资源 battery life 命令行方式手动优化命令行方式手动优化 利用 tools 文件夹下的 zipalign 工具 首先调出 cmd 命令行 然后执行 zipalign v 4 source apk androidres apk 这个方法不受 API Level 的 限制 可以对任何版本的 APK 执行 Align 优化 同时可以利用 zipalign 工具检查当前 APK 是否已经执行过 Align 优化 命令 zipalign c v 4 androidres apk 使用使用 ADT 自动优化自动优化 从 ADT 0 9 3 版本开始 可以通过 export wizard 自动对发布的 application packages 执行 align 操作 设置方法 鼠标右键点击 Project 然后选择 Android Tools Export Signed Application Package 综上所述 可以使用 Keytool Jarsigner zipalign 给程序签名并优化程序 这样就需要三 个不同的工具 keytool genkey v keystore android keystore alias android keyalg RSA validity 20000 jarsigner verbose keystore android keystore signedjar android123 signed apk android123 apk android zipalign v 4 android123 signed apk android123 signed aligned apk 当然 也可以通过 ADT 插件中 Export Signed Application Package 来执行 图形界面更 为简单 形象 直观 参考 Android SDK signing html application packages Android Animation 学习笔记学习笔记 关于动画的实现 Android 提供了 Animation 在 Android SDK 介绍了 2 种 Animation 模 式 1 Tween Animation 通过对场景里的对象不断做图像变换 平移 缩放 旋转 产生动画效 果 即是一种渐变动画 2 Frame Animation 顺序播放事先做好的图像 是一种画面转换动画 动画类型下面先来看看 Android 提供的动画类型 Android 的 animation 由四种类型组成 在 XML 文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 在 Java 源码中定义了相应的类 可以使用这些类的方法来获取和操作相应的属性 AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐变尺寸伸缩动画效果 TranslateAnimation 画面转换位置移动动画效果 RotateAnimation 画面转移旋转动画效果 Tween Animation 一个 tween 动画将对视图对象中的内容进行一系列简单的转换 位置 大 小 旋转 透明性 如果你有一个文本视图对象 你可以移动它 旋转它 让它变大或让它 变小 如果文字下面还有背景图像 背景图像也会随着文件进行转换 使用使用 XML 来定义来定义 Tween Animation 动画的 XML 文件在工程中 res anim 目录 这个文件必须包含一个根元素 可以使 插值元素或者是把上面的元素都放入元素 组中 默认情况下 所以的动画指令都是同时发生的 为了让他们按序列发生 需要设置一个 特殊的属性 startOffset 动画的指令定义了你想要发生什么样的转换 当他们发生了 应该 执行多长时间 转换可以是连续的也可以使同时的 例如 你让文本内容从左边移动到右边 然后旋转 180 度 或者在移动的过程中同时旋转 没个转换需要设置一些特殊的参数 开始和 结束的大小尺寸的大小变化 开始和结束的旋转角度等等 也可以设置些基本的参数 例如 开始时间与周期 如果让几个转换同时发生 可以给它们设置相同的开始时间 如果按序列 的话 计算开始时间加上其周期 Tween Animation 共同的节点属性 属性 类型 功能备注 Duration long 属性为动画持续时间时间以毫秒为单位 fillAfter boolean 当设置为 true 该动画转化在动画结束后被应用 fillBefore boolean 当设置为 true 该动画转化在动画开始前被应用 interpolator 指定一个动画的插入 器 有一些常见的插入器 accelerate decelerate interpolator 加速 减速 动画插入器 accelerate interpolator 加速 动画插入器 decelerate interpolator 减速 动画插入器 其他的属于特定的动画效果 repeatCount int 动画的重复次数 RepeatMode int 定义重复的行为1 重新开始 2 plays backward startOffset long 动画之间的时间间隔 从上次动画停多少时间开始执行下个动 画 zAdjustment int 定义动画的 Z Order 的改变 0 保持 Z Order 不变 1 保持在最上层 1 保持在最下层 表二 XML 节点功能说明 alpha渐变透明度动画效果渐变透明度动画效果 fromAlpha属性为动画起始时透明度 toAlpha属性为动画结束时透明度 0 0 表示完全透明 1 0 表示完全不透明 以上值取 0 0 1 0 之间的 float 数据类型 的数字 duration 为动画持续时间 ms 单位 表三 scale渐变尺寸伸缩动画效果渐变尺寸伸缩动画效果 fromXScale float fromYScale float 为动画起始时 X Y 坐 标上的伸缩尺寸 toXScale float toYScale float 为动画结束时 X Y 坐 标上的伸缩尺寸 0 0 表示收缩到没有 1 0 表示正常无伸缩 值小于 1 0 表示收缩 值大于 1 0 表示放大 pivotX float 为动画相对于物件的属性值说明 从 0 100 中取值 pivotY float X Y 坐标的开始位置50 为物件的 X 或 Y 方向坐标上的中 点位置 表四 translate画面转换位置移动动画效果画面转换位置移动动画效果 fromXDelta toXDelta 为动画 结束起始时 X 坐标上的位置 fromYDelta toYDelta 为动画 结束起始时 Y 坐标上的位置 表五 rotate画面转移旋转动画效果画面转移旋转动画效果 fromDegrees 为动画起始时物件的角 度 toDegrees 属性为动画结束时物件 旋转的角度 可以大于 360 度 说明 当角度为负数 表示逆时针旋转 当角度为正数 表示顺时针旋转 负数 from to 正数 顺时针旋转 负数 from to 负数 逆时针旋转 正数 from to 正数 顺时针旋转 正数 from to 负数 逆时针旋转 pivotX pivotY 为动画相对于物件的 X Y 坐标的开始位 说明 以上两个属性值 从 0 100 中取值 50 为物件的 X 或 Y 方向坐标上的中点位置 下面给出一个完整的下面给出一个完整的 XML 定义 定义 SDK 提供 提供 Tween Animation 如何使用如何使用 使用 AnimationUtils 类的静态方法 loadAnimation 来加载 XML 中的动画 XML 文件 main xml 中的 ImageView ImageView spaceshipImage ImageView findViewById R id spaceshipImage 加载动画 Animation hyperspaceJumpAnimation AnimationUtils loadAnimation this R anim hyperspace jump 使用 ImageView 显示动画 spaceshipImage startAnimation hyperspaceJumpAnimation 如何在如何在 Java 代码中定义动画代码中定义动画 在代码中定义 动画实例对象 private Animation myAnimation Alpha private Animation myAnimation Scale private Animation myAnimation Translate private Animation myAnimation Rotate 根据各自的构造方法来初始化一个实例对象 myAnimation Alpha new AlphaAnimation 0 1f 1 0f myAnimation Scale new ScaleAnimation 0 0f 1 4f 0 0f 1 4f Animation RELATIVE TO SELF 0 5f Animation RELATIVE TO SELF 0 5f myAnimation Translate new TranslateAnimation 30 0f 80 0f 30 0f 300 0f myAnimation Rotate new RotateAnimation 0 0f 350 0f Animation RELATIVE TO SELF 0 5f Animation RELATIVE TO SELF 0 5f interpolator 的解释的解释 interpolator 定义一个动画的变化率 the rate of change 这使得基本的动画效果 alpha scale translate rotate 得以加速 减速 重复等 Interpolator 定义了动画的变化速度 可以实现匀速 正加速 负加速 无规则变加速等 Interpolator 是基类 封装了所有 Interpolator 的共同方法 它只有一个方法 即 getInterpolation float input 该方法 maps a point on the timeline to a multiplier to be applied to the transformations of an animation Android 提供了几个 Interpolator 子类 实现了不同的速度曲线 如下 AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢 在中间的 时候加速 AccelerateInterpolator在动画开始的地方速率改变比较慢 然后开始加速 CycleInterpolator动画循环播放特定的次数 速率改变沿着正弦曲线 DecelerateInterpolator在动画开始的地方速率改变比较慢 然后开始减速 LinearInterpolator在动画的以均匀的速率改变 Frame AnimationFrame Animation 是顺序播放事先做好的图像 跟电影类似 不同于 animation package Android SDK 提供了另外一个类 AnimationDrawable 来定义 使 用 Frame Animation Frame Animation 可以在 XML Resource 定义 还是存放到 res anim 文件夹下 也可 以使用 AnimationDrawable 中的中的 API 定义定义 由于 Tween Animation 与 Frame Animation 有着很大的不同 因此 XML 定义的格式也完全不一样 其格式是 首先是首先是 animation list 根节点 根节点 animation list 根节点中包含多个根节点中包含多个 item 子节点 每个子节点 每个 item 节节 点定义一帧动画 当前帧的点定义一帧动画 当前帧的 drawable 资源和当前帧持续的时间 资源和当前帧持续的时间 下面对节点的元素加以说 明 XML 属性说明 drawable当前帧引用的 drawable 资源 duration当前帧显示的时间 毫秒为单位 oneshot 如果为 true 表示动画只播放一次停止在最后一帧上 如果设 置为 false 表示动画循环播放 variablePadding If true allows the drawable s padding to change based on the current state that is selected visible规定 drawable 的初始可见性 默认为 flase 下面就给个具体的 XML 例子 来定义一帧一帧的动画 上面的 XML 就定义了一个 Frame Animation 其包含 3 帧动画 3 帧动画中分别应用了 drawable 中的 3 张图片 rocket thrust1 rocket thrust2 rocket thrust3 每帧动画 持续 200 毫秒 然后我们将以上 XML 保存在 res anim 文文件夹下 命名为 rocket thrust xml 显示动画 的代码 AnimationDrawable rocketAnimation public void onCreate Bundle savedInstanceState super onCreate savedInstanceState setContentView R layout main ImageView rocketImage ImageView findViewById R id rocket image rocketImage setBackgroundResource R anim rocket thrust rocketAnimation AnimationDrawable rocketImage getBackground public boolean onTouchEvent Motio

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论