android和androidx(Android之MotionLayout(一),MotionLayout的基本使用)

2023-03-19 12:15:02 56

android和androidx(Android之MotionLayout(一),MotionLayout的基本使用)

本文目录

Android之MotionLayout(一),MotionLayout的基本使用

Android之MotionLayout(一),MotionLayout的基本使用
Android之MotionLayout(二),MotionScene的标签属性说明
Android之MotionLayout(三),用 MotionLayout 来做过渡动画,如何使用ConstraintSet
Android之MotionLayout(四),用 MotionLayout实现向上拉的折叠效果
Android之MotionLayout(五),如何使用 MotionLayout的自定义属性
Android之MotionLayout(六),如果使用Keyframes实现实现YouTube切换效果

MotionLayout 是一个 Google 官方出品用于制作 Android 中的过渡动画的框架。用来它就能轻松的做出一些较为复杂的动画效果
我们看一下效果图:

如果您使用了 AndroidX

如果您没有使用 AndroidX

由于 MotionLayout 类继承自 ConstraintLayout 类,因此可以在布局中使用 MotionLayout 替换掉 ConstraintLayout
MotionLayout 与 ConstraintLayout 不同的是:
MotionLayout 需要链接到一个 MotionScene 文件。使用 MotionLayout 的 app:layoutDescription 属性将 MotionLayout 链接到一个 MotionScene 文件。

在之前的 MotionLayout 示例中,app:layoutDescription 属性引用一个 MotionScene。MotionScene 是一个 XML 资源文件,其中包含相应布局的所有运动描述。为了将布局信息与运动描述分开,每个 MotionLayout 都引用一个单独的 MotionScene。请注意,MotionScene 中的定义优先于 MotionLayout 中的任何类似定义。

MotionScene 文件描述了两个场景间的过渡动画,存放在 res/xml 目录下。
要使用 MotionLayout 创建过渡动画,你需要创建两个 layout 布局文件来描述两个不同场景的属性。当从一个场景切换到另一个场景时,MotionLayout 框架会自动检测这两个场景中具有相同 id 的 View 的属性差别,然后针对这些差别属性应用过渡动画(类似于 TransitionManger)

MationLayout 除了支持上面列出的标准属性外,还支持全部的 ConstraintLayout 属性。

我们来分三步完成线面这个例子

场景1布局效果

场景2布局效果

编写完 MotionLayout 文件后就可以直接运行程序了。点击 image 即可进行场景切换。当进行场景切换时,MotionLayout 会自动计算出两个场景之间的差别,然后应用相应的过渡动画

Androidx和Android support库共存问题解决

1、添加第三方依赖时候报错。

Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory)from AndroidManifest.xml:22:18-86value=(androidx.core.app.CoreComponentFactory).    Suggestion: add’tools:replace=“android:appComponentFactory“’to element at AndroidManifest.xml:36:5-364:19to override.

经过各种折腾,终于get到, Androidx和Android support库不能共存

Androidx和Android support库共存截图

解决方案一 转换成Androidx

将build tools更新到3.2.0,gradle更新到4.6,依赖库统一更新到28.0.0 ,这一步非常重要,否则会导致第二步不能完全转换成功。
修改完成后,可以看到依赖库都是28.0.0的
选择工程右键→Refactor→Migrate to Androidx...
选中所有需要重命名的目录,执行Do Refactor
发现已经看不到support库了,运行成功安装app。

解决方案二 转换成Android Support

查看那些库依赖了Androidx,

找到了问题,果断回退这个依赖库的版本到2.1.4.

发现看不到androidx库了,运行成功安装app。

依赖库的时候,尽量不要使用latest.release,而使用具体的版本。

不会因为依赖库更新,引起兼容问题;

减少每次去查找最新版本,可以节省编译时间。**

Android StudioBug积累(一)一次关于AndroidX引发的血案

注:由于以下种种我都找到了合理完备的博客,所以在这一篇中便不做额外的分析,这次处理Bug也只是人生漫漫Bug路的一次缩影。所以说,我们要积极面对,永不言弃。
始发:清单文件类(Manifest)

mumu模拟器安卓x和安卓6区别

版本不同,兼容性不同。
1、版本不同,mumu模拟器安卓x是该模拟器的测试版本,而安卓6是该模拟器的正式版本。
2、由于安卓x是测试版本,仅支持光遇和幻塔两个游戏,安卓六能够兼容Android6.0内核的所有游戏。

新建的AndroidX项目改为Android示例

注:这里只是个成功的示例,compileSdkVersion和27.1.1有关,也可以换成你需要的

提供下颜色

清单AndroidManifest

Android-Lifecycle原理解析

Event触发的时机:

而在androidx.activity.ComponentActivity和androidx.core.app.ComponentActivity中,该方法的实现,其实都是一样的。

但是这两个Activity,其实都有自己的mLifecycleRegistry对象。

LifecycleRegistry对象其实可以理解为观察者模式中的Observable,也就是被观察者,而LifecycleRegistry对象的创建,其实是传入一个LifecycleOwner实现类对象,而androidx.activity.ComponentActivity和androidx.core.app.ComponentActivity实现了LifecycleOwner接口,所以传入的是this。

LifecycleRegistry中聚合了多个LifecycleObserver,生命周期改变时,通知LifecycleObserver进行相应方法的调用。
在LifecycleRegistry类中的addObserver方法中,其实就是通过封装LifecycleObserver生成了一个ObserverWithState对象,然后放入FastSafeIterableMap中,而FastSafeIterableMap其实就是一个自定义列表,用于保存观察者并且可在遍历期间处理删除/添加。
其实在自定义的某个类去实现LifecycleObserver接口的时候,在activity中,是需要通过getLifecycle().addObserver()进行注册的,这个过程其实就是调用了LifecycleRegistry的addObserver()方法。

ObserverWithState statefulObserver = new ObserverWithState(observer, initialState);会将LifecycleObserver对象封装在ReflectiveGenericLifecycleObserver对象中。但是这里的需要判断是实现了哪个接口,比如androidx.activity.ComponentActivity中的构造函数中,因为是直接new LifecycleEventObserver匿名内部类实现接口对象,则isLifecycleEventObserver为true,就不会new ReflectiveGenericLifecycleObserver(),而在自定义一个类的时候,一般实现LifecycleObserver接口,则就会new ReflectiveGenericLifecycleObserver()

androidx.activity.ComponentActivity的构造函数:这里是new LifecycleEventObserver

自定义的BasePresenter:这里是实现LifecycleObserver接口

所以上面的两种不同的实现,BasePresenter实现的是LifecycleObserver,所以这个LifecycleObserver的最终实现是ReflectiveGenericLifecycleObserver。而ComponentActivity因为是new LifecycleEventObserver,所以这个匿名内部类对象就是最终实现。

在androidx.core.app.ComponentActivity的onCreate方法中,会调用

这里使用ReportFragment,如果是api29以及以上的,则可以直接注册回调来获取Activity的生命周期回调。如果是api29以下的,则需要手动给Activity添加一个空白的Fragment,类似于Glide监听生命周期回调的做法。

LifecycleCallbacks的定义如上,是在ReportFragment中定义的,其实就是使用了Application.ActivityLifecycleCallbacks来实现了。
其实就是在androidx.core.app.ComponentActivity中添加一个ReportFragment,而ReportFragment的生命周期方法,其实都调用了一个dispatch方法。

所以在ReportFragment的生命周期方法,其实就会通过调用对应的dispatch方法进而调用到了Activity的getLifecycle()方法获取到一个LifecycleRegistry对象,然后调用LifecycleRegistry的handleLifecycleEvent()方法。

这里需要事先获取到Activity的下一个生命周期状态,而这个状态过程其实与Fragment的类似,都是先升序,然后再降序的一个过程。即ON_CREATE是CREATED,ON_RESUME是RESUMED,然后ON_PAUSE是变成STARTED

而上面调用的sync()方法,其实其内部会调用两个方法backwardPass()和forwardPass(),一个是逆推,一个是顺推,其实就是可以认为一个是正序,一个是倒序。
比如forwardPass(),其实其内部就是遍历刚才缓存Observer的集合,找到每个Observer

而这里的dispatchEvent,其实就是ObserverWithState的方法,因为ObserverWithState内部封装了LifecycleEventObserver对象,而LifecycleEventObserver对象又是封装了LifecycleObserver对象的。

比如Activity的,其实onStateChanged是在androidx.activity.ComponentActivity的构造器中添加注册的LifecycleEventObserver监听接收对应的处理回调,在这里就会根据是ON_STOP还是ON_DESTROY进行回调的处理,也就是生命周期的处理。
这样的生命周期回调,在自定义类实现LifecycleObserver接口的时候,也可以采用注解的方式注册对应的LifecycleEventObserver监听,这样的生命周期的回调,其实就是回调到对应的注解和事件的方法中。这样是采用了类似于apt注解处理器的方式,生成了对应的java类

这里需要注意,如果是自定义添加监听的时候,是实现了LifecycleEventObserver,那么在分发的时候,调用ObserverWithState的dispatchEvent方法去分发,就会直接回调到了自定义LifecycleEventObserver实现类中的onStateChanged中;而如果是使用LiveData添加观察者的话,则是封装成LifecycleBoundObserver对象,然后通过其onStateChanged方法继续进一步的处理分发,调用到对应的Observer的onChanged方法进行最终的处理

如果这里的分发是分发到上面的那个自定义的BasePresenter,则需要经过ReflectiveGenericLifecycleObserver

从上面的原理解析,可以知道,Lifecycle的生命周期的感知和分发,其实也是依赖于一个ReportFragment,这其实也是一个空的Fragment,这样的做法,其实与Glide的生命周期的监听是类似的做法,都是采用一个空的Fragment来监听生命周期的变化,然后在不同的生命周期做不同的操作。

android和androidx(Android之MotionLayout(一),MotionLayout的基本使用)

本文编辑:admin
: android和androidx,

更多文章:


苹果生产日期查询(怎么看iPhone生产日期)

苹果生产日期查询(怎么看iPhone生产日期)

本文目录怎么看iPhone生产日期苹果手机怎么查询生产日期和产地苹果怎么看生产日期 苹果看生产日期的方法怎么查看自己的iphone的生产日期苹果手机怎么查生产日期和购买日期怎么查苹果手机的生产日期苹果手机生产日期怎么查如何查询苹果手机生产日

2023年6月7日 16:40

三星维修服务(三星手机的售后服务电话是多少)

三星维修服务(三星手机的售后服务电话是多少)

本文目录三星手机的售后服务电话是多少三星手机怎么售后服务三星手机会提供什么样的售后服务三星售后服务如何三星的售后服务电话是多少三星手机有售后服务吗三星手机维修服务中心地址在哪广西三星手机售后服务点在哪里SAMSUNG|广州海珠区三星数码相机

2024年6月22日 08:29

金立手机有官网吗(金立手机官网)

金立手机有官网吗(金立手机官网)

本文目录金立手机官网金立手机官网是什么金立手机官方网站那个知道金立手机厂家的网站在哪里金立手机官网的介绍金立手机的真正官网是多少金立手机官网怎么登录金立手机官网金立手机官网1122你试下,应该正确的。密码是:1122这个是金立手机官网!!!

2024年7月7日 06:20

谷歌g1软件下载(谷歌G1,网络设置和软件下载懂的指教下)

谷歌g1软件下载(谷歌G1,网络设置和软件下载懂的指教下)

本文目录谷歌G1,网络设置和软件下载懂的指教下谷歌G1手机上网设置和软件下载使用大虾救命!谷歌G1怎么装在电脑上下载的软件谷歌 G1软件下载谷歌G1手机能用的软件有哪些要全面的谷歌G1用GPRS上网怎么下载软件!求助高手!最新买了一部谷歌G

2023年6月24日 21:20

联想手机a3580(联想A3580突然不读卡怎么回事)

联想手机a3580(联想A3580突然不读卡怎么回事)

本文目录联想A3580突然不读卡怎么回事我的联想A3580是否支持NFC功能联想A3580怎么截屏联想a3580安不上sim卡怎么回事联想 a3580电信版手机开机密码忘记怎么办lenovo A3580 手机型号怎么样联想a3580手机插卡

2024年7月18日 17:21

华为3c体验顾问(华为体验店销售顾问工资可以达到一万吗)

华为3c体验顾问(华为体验店销售顾问工资可以达到一万吗)

本文目录华为体验店销售顾问工资可以达到一万吗华为服务体验顾问发展前景华为慧通体验店顾问发展前景华为体验店顾问是干什么的薪资待遇如何华为体验店顾问会给手机吗华为服务平台专员和体验顾问哪个好华为体验店顾问能干到多大岁数华为3c体验顾问适合女生做

2024年7月12日 07:03

手机处理器性能排行榜搞笑图(手机处理器性能排行)

手机处理器性能排行榜搞笑图(手机处理器性能排行)

本文目录手机处理器性能排行手机处理器性能排行榜天梯图2022手机处理器排行榜什么手机处理器性能最好华为手机处理器排名手机处理器性能排行榜天梯图手机处理器性能排行榜手机处理器排行榜前十名有哪些手机cpu排行榜天梯图cpu性能天梯图手机处理器性

2024年7月3日 15:24

诺基亚5630来电铃声(请大家帮忙找下诺基亚5630这款手机里的自带短信铃声Message 7.aac的下载网站!)

诺基亚5630来电铃声(请大家帮忙找下诺基亚5630这款手机里的自带短信铃声Message 7.aac的下载网站!)

本文目录请大家帮忙找下诺基亚5630这款手机里的自带短信铃声Message 7.aac的下载网站!诺基亚5630情景模式铃声怎么不能换自己下的歌、主题问题诺基亚5630怎么设置短信铃声是短信谢谢 尽量详细点诺基亚5630怎么设置来电铃声诺基

2024年7月24日 05:34

华为p20保时捷多少钱(华为p20和p20pro有什么区别)

华为p20保时捷多少钱(华为p20和p20pro有什么区别)

本文目录华为p20和p20pro有什么区别华为手机价格华为p20保时捷版是不是曲面屏华为新款p20pro多少钱华为p20pro保时捷多少钱华为P20手机多少钱华为最新款手机多少钱一台华为手机官网报价多少华为Mate20买多少钱华为p20保时

2024年5月28日 03:40

索爱s500c软件下载(那个可以详细的告诉我怎么用手机下书和视频和主题啊!要步骤!谢谢!《索爱S500C》)

索爱s500c软件下载(那个可以详细的告诉我怎么用手机下书和视频和主题啊!要步骤!谢谢!《索爱S500C》)

今天给各位分享那个可以详细的告诉我怎么用手机下书和视频和主题啊!要步骤!谢谢!《索爱S500C》的知识,其中也会对那个可以详细的告诉我怎么用手机下书和视频和主题啊!要步骤!谢谢!《索爱S500C》进行解释,如果能碰巧解决你现在面临的问题,别

2024年10月13日 13:45

海信金刚ii(海信金刚2和小米比起来怎么样)

海信金刚ii(海信金刚2和小米比起来怎么样)

本文目录海信金刚2和小米比起来怎么样海信金刚2手机怎么获root海信电信手机如何我的海信金刚2手机设置不见了怎么找出来海信金刚手机如何换电池海信金刚手机连不上小米手环高通415手机有哪些 高通骁龙415手机汇总海信金刚2和小米比起来怎么样海

2023年6月4日 10:00

华为荣耀p40图片(荣耀30pro+和华为p40哪个好)

华为荣耀p40图片(荣耀30pro+和华为p40哪个好)

本文目录荣耀30pro+和华为p40哪个好华为p40自拍不能放大吗华为P40和荣耀Play 4T前后脚发布,到底谁更厉害华为p40和荣耀v30 ppo哪个更值得买荣耀30pro+和华为p40哪个好华为p40和荣耀30Pro+对比介绍屏幕方面

2023年10月3日 07:50

西门子洗衣机服务24小时热线(西门子洗衣机全国服务热线是多少)

西门子洗衣机服务24小时热线(西门子洗衣机全国服务热线是多少)

本文目录西门子洗衣机全国服务热线是多少西门子洗衣机售后电话24小时西门子客服电话24小时人工服务热线西门子洗衣机售后电话,北京西门子洗衣机售后服务电话是多少西门子洗衣机的售后服务电话号码是多少西门子洗衣机全国售后服务热线2022已更新(40

2024年7月10日 13:55

三星s9+手机壳(S9的后盖材质是哪种)

三星s9+手机壳(S9的后盖材质是哪种)

本文目录S9的后盖材质是哪种三星s9跟s9+手机壳大小有什么区别S9的后盖材质是什么呢三星s9+翻盖皮套为什么不能用S9的后盖材质是什么啊什么手机壳最适合三星s9pluss9+原装智能手机壳合盖后屏幕未关闭怎么回事S9的后盖材质是哪种viv

2023年10月12日 09:50

安卓4.0手机(安卓4.0系统手机如何设置呼叫转移)

安卓4.0手机(安卓4.0系统手机如何设置呼叫转移)

本文目录安卓4.0系统手机如何设置呼叫转移求推荐双核、安卓4.0、1600以下的智能手机…华为安卓 4.0的手机有哪些安卓4.0系统的手机 有哪些牌子求推荐一部安卓4.0英寸以上的手机手机安卓4.0是什么意思什么是安卓4.0 ,双核手机现在

2024年7月12日 22:56

摩托罗拉ex223怎么解锁(摩托罗拉ex223手机开机密码忘记了怎么办)

摩托罗拉ex223怎么解锁(摩托罗拉ex223手机开机密码忘记了怎么办)

本文目录摩托罗拉ex223手机开机密码忘记了怎么办摩托罗拉手机屏幕锁忘了,怎么解锁我的摩托罗拉EX223手机忘记密码了怎么解锁啊摩托罗拉ex223手机开机密码忘记了怎么办可以先拿去移动营业厅让他们解锁(免费的,如果他们说必须充值什么的,别信

2024年1月20日 01:15

小米10刚上市价格是多少(曝小米将首发1.5亿像素镜头新机,小米10沦为百元机遭疯抢)

小米10刚上市价格是多少(曝小米将首发1.5亿像素镜头新机,小米10沦为百元机遭疯抢)

本文目录曝小米将首发1.5亿像素镜头新机,小米10沦为百元机遭疯抢小米10手机多少钱小米10Pro多少钱曝小米将首发1.5亿像素镜头新机,小米10沦为百元机遭疯抢小米CC9 Pro、小米10系列上的1.08亿像素镜头为这几款手机带来清晰的拍

2023年8月9日 23:50

htc g17 rom(跪求!HTC G17从第三方ROM刷回官方RUU的方法,手机是行货)

htc g17 rom(跪求!HTC G17从第三方ROM刷回官方RUU的方法,手机是行货)

本文目录跪求!HTC G17从第三方ROM刷回官方RUU的方法,手机是行货HTC G17 第三方rom刷入BOOT后还是无限重启htc g17刷什么rom好些G17 htc 想刷成4.0 如何刷请帮忙附上全部教程,谢谢HTCG17,ROM版

2024年5月19日 18:13

华为随行wifi3套餐价格表(随身wifi一年交多少钱)

华为随行wifi3套餐价格表(随身wifi一年交多少钱)

其实华为随行wifi3套餐价格表的问题并不复杂,但是又很多的朋友都不太了解随身wifi一年交多少钱,因此呢,今天小编就来为大家分享华为随行wifi3套餐价格表的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录随身w

2024年9月17日 07:35

诺基亚1682c手机(诺基亚1682c手机被锁密码了怎么解密)

诺基亚1682c手机(诺基亚1682c手机被锁密码了怎么解密)

本文目录诺基亚1682c手机被锁密码了怎么解密诺基亚1682c与诺基亚2610有什么区别诺基亚1682C有些什么功能诺基亚1682c白屏是怎么回事 急需 谢谢诺基亚1682c怎么样诺基亚1682c怎么样请问诺基亚心机1682c手机原始保密码

2024年6月29日 15:07

近期文章

本站热文

电脑包尺寸对照表(电脑包要多大)
2024-07-23 11:15:58 浏览:3883
e10000(皖E10000是什么车)
2024-07-17 11:22:25 浏览:3506
ati radeon hd 5650(电脑的显卡是ATI Mobility Radeon HD 5650 (MADION PRO) ( 1 GB ) 这个显卡)
2024-07-07 05:01:37 浏览:3100
华为mate20pro版本区别(mate20pro有必要买ud版吗)
2024-07-24 08:26:42 浏览:2631
ipad买蜂窝版还是wifi版(ipad air 5买蜂窝好不好)
2024-07-17 14:35:19 浏览:2237
vivo y3配置参数(vivoy3参数是什么)
2024-07-16 07:07:06 浏览:2071
标签列表

热门搜索