| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android组件内核之Fragment管理与内核(二),android屏幕适配原理 -> 正文阅读 |
|
[移动开发]Android组件内核之Fragment管理与内核(二),android屏幕适配原理 |
} 1.3.9FragmentManagerImpl#enqueueAction /**
这里把操作添加到mPendingActions列表里去。并通过mHost.getHandler()获取Handler发送执行请求。从上面的分析知道,mHost就是Activity的HostCallbacks,构造方法中把Activity的mHandler传进去了,这里执行的mHost.getHandler()获取到的也就是Activity中的mHandler,这样做是因为需要在主线程中执行 final Handler mHandler = new Handler(); 再看看mExecCommit中做了什么操作: Runnable mExecCommit = new Runnable() { /**
//再次检测是否主线程 boolean didSomething = false; while (true) { synchronized (this) { //参数检测 numActions = mPendingActions.size(); mPendingActions.toArray(mTmpActions); mExecutingActions = true; doPendingDeferredStart(); return didSomething; 插入了事物之后,就是在主线程中把需要处理的事务统一处理,处理事务是通过执行mTmpActions[i].run()进行的,这个mTmpActions[i]就是前面我们通过enqueueAction方法插入的BackStackRecord,童鞋们可能没注意到,它可是一个Runnable,我们来看看它 final class BackStackRecord extends FragmentTransaction implements 兜兜转转,我们又回到了BackStackRecord 1.3.10BackStackRecord#run public void run() { … if (mManager.mCurState >= Fragment.CREATED) { op = op.next; mManager.moveToState(mManager.mCurState, mTransition, if (mAddToBackStack) { 到这一步,提交的事务就被真正执行了,我们知道,即使commit了事务之后,也不是同步执行的,是通过Handler发送到主线程执行的。 所有事务的处理都是在run方法里面执行,但是我们留意到,想要搞清楚add、remove等事务背后真正做了什么,还需要深入了解FragmentManagerImpl。 2.1标准转场动画:可以给Fragment指定标准的转场动画,通过**setTransition(int transit)**方法。 该方法可传入的三个参数是: TRANSIT_NONE, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE 分别对应无动画、打开形式的动画和关闭形式的动画。 标准动画设置好后,在Fragment添加和移除的时候都会有。 2.2自定义转场动画自定义转场动画是通过setCustomAnimations()方法,因为Fragment添加时可以指定加入到Back Stack中,所以转场动画有添加、移除、从Back stack中pop出来,还有进入四种情况。 注意setCustomAnimations()方法必须在add、remove、replace调用之前被设置,否则不起作用。 ##2.3 android.app.Fragment 类参考: Fragment:http://developer.android.com/reference/android/app/Fragment.html FragmentTransaction:http://developer.android.com/reference/android/app/FragmentTransaction.html 不使用v4包的情况下(min API >=11)所对应的动画类型是Property Animation。 即动画资源文件需要放在*res\animator*目录下,且根标签是, , or **三者之一。 这一点也可以从Fragment中的这个方法看出:onCreateAnimator)(int transit, boolean enter, int nextAnim),返回值是Animator。 自定义转场动画时,四个参数的形式setCustomAnimations (int enter, int exit, int popEnter, int popExit)是API Level 13才有的,11只引入了两个动画的形式,即无法指定Back Stack栈操作时的转场动画。 代码例子: private void addFragment() { if (null == mFragmentManager) { mTextFragmentOne = new MyFragmentOne(); } 其中四个动画是从ApiDemos中拿来的: fragment_slide_left_enter: <?xml version="1.0" encoding="utf-8"?>fragment_slide_left_exit: <?xml version="1.0" encoding="utf-8"?>fragment_slide_right_enter: <?xml version="1.0" encoding="utf-8"?>fragment_slide_right_exit: <?xml version="1.0" encoding="utf-8"?>android.support.v4.app.Fragment FragmentTransaction:http://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html 使用v4包,Fragment的使用不再局限于API Level 11之上,低等级的API也可以使用,但是这时候转场动画的类型是View Animation。 动画资源放在**res\anim**路径下,和Activity的转场动画一样。 Fragment中的方法:onCreateAnimation)(int transit, boolean enter, int nextAnim)返回值Animation。 FragmentTransaction中的setCustomAnimations()方法,两参数类型和四参数类型都可用。 所以一般还是用v4包的这个版本,一是兼容性比较好,另外View Animation其实基本可以满足转场动画的需要。 代码例子: private void addFragment() { if (null == mFragmentManager) { mTextFragmentOne = new MyFragmentOne(); 所以一般还是用v4包的这个版本,一是兼容性比较好,另外View Animation其实基本可以满足转场动画的需要。 代码例子: private void addFragment() { if (null == mFragmentManager) { mTextFragmentOne = new MyFragmentOne(); |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/28 5:38:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |