ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

用一把王者的时间入门JetPack Compose

2021-12-21 21:00:17  阅读:234  来源: 互联网

标签:动画 Compose 函数 自定义 JetPack 王者 Android


为了让大家更快、更有效的学习JetPack Compose,这里给大家介绍一份《JetPack Compose开发应用指南》。

这本指南包括七个章节,内容涵盖:

  • 初识JetPack
  • Compose的设计原理和基本概念
  • Compose入门案例与实战
  • Compose布局
  • Compose动画
  • Compose图形
  • Compose核心控件

一、初识JetPack

  • JetPack是什么
    Jetpack 是一套库、工具和指南,可帮助开发者更轻松地编写优质应用。这些组件可帮助你遵循最佳做法、让你摆脱编写样板代码的工作并简化复杂任务,以便你将精力集中放在所需的代码上。
    JetPack分类有四种,分别是Architecture、Foundationy、Behavior、UI。

  • JetPack和AndroidX
    Jetpack 是各种组件库的统称,AndroidX 是这些组件的统一包名。

  • AndroidX的迁移
    第一步: 升级版本
    第二步:开启Jetifier
    第三步:更新依赖
    第四步:使用Android Studio进行迁移
    image.png

二、Compose的设计原理和基本概念

  • JetPack Compose 环境搭建
    建议升级到北极狐版本(2020.3.1)。

  • JetPack Compose 新特性和组件依赖
    Compose的优势:

    1. 紧密结合Kotlin,可以利用现代化编程语言的魅力(高阶函数、各种函数新特性)
    2. 提高声明式UI开发效率
    3. 结合最新的IDE可以进行实时预览、动画执行等功能
    4. Jetpack Compose 为我们提供了很多开箱即用的Material 组件
    5. 还有很多等你体验
  • JetPack Compose 编程思想总结

    1. 声明性编程范式
    2. 可组合函数 ( @Composable函数)
    3. 声明性范式转变 (在 Compose 的声明性方法中,微件相对无状态,并且不提供
      setter 或 getter 函数。)
      image.png

三、Compose入门

  • JetPack Compose 入门的基础案例

  • JetPack Compose 基础实战
    image.png

四、Compose布局

  • Compose State
    Jetpack Compose 像React或者Flutter一样,需要通过state变更驱动UI刷新。但是
    Compose没有React的ClassComponent或者Flutter的StatefulWidget,那Compose
    是如何更新并监视state呢?
    一种方式是使用state{…}方法声明初始状态,并监听状态变化。当状态变化时,会触发
    recomposition执行从而刷新UI。
    另外一种方式就是通过@model注解来完成Compose State的管理。使用@modle添加的
    Class,其所有的的属性的变成了可观察的状态。

  • Compose 样式(Theme)
    Compose提供了系统化的方法来帮助我们自定义主题,这让我们在实现暗黑主题以及其他颜色主题的时候非常非常的方便。这一小节我们先通过一个小的案例来了解Compose的样式是什么?又该如何的设置?

  • Compose布局核心控件
    Jetpack Compose 提供了 Material Design 的实现,后者是一个用于创建数字化界面的综
    合设计系统。Material 组件(按钮、卡片、开关等)和布局(如 Scaffold)可作为可组合
    函数提供。

  • 自定义布局
    在 Compose 中,界面元素由可组合函数表面,此类函数在被调用后会发出一部分界面,这
    部分界面随后会被添加到呈现在屏幕上的界面树中。每个界面元素都有一个父元素,还可能
    有多个子元素。此外,每个元素在其父元素中都有一个位置,指定为 (x, y) 位置;也都有一
    个尺存,指定为 width 和 height。

  • Compose中的ConstraintLayout
    是否将 ConstraintLayout 用于 Compose 中的特定界⾯取决于开发者的偏好。在Android View 系统中,使用 ConstraintLayout 作为构建更高性能布局的一种方法,但这在 Compose 中并不是问题。在需要进行选择时,请考虑 ConstraintLayout 是否有助于提高可组合项的可读性和可维护性。
    image.png

五、Compose动画

  • Compose SideEffect
    简单的可组合函数,使用 Compose,可以通过定义一组接受数据而发出界面元素的可组合
    函数来构建界面。

  • Compose 动画概述
    几个核心重点函数:

    1. AnimatedVisibility
    2. animateContentSize
    3. animate*AsState
    4. Animatable
  • Compose Crossfade
    Crossfade可以通过监听状态值的变化,使用淡入淡出的动画在两个布局之间添加动画效
    果,函数自身就是一个Composable。

  • Compose animateContentSize
    可以为布局大小动画设置动画速度和监听值。由函数的定义可以看出这个函数本质上就Modefier的一个扩展函数。可以通过变量size监听状态变化实现布局大小的动画效果。

  • Animatable
    Animatable 是一个值容器,它可以在通过 animateTo 更改值时为值添加动画效果。该API 支持animate*AsState 的实现。它可确保一致的连续性和互斥性,这意味着值变化始终是连续的,并且会取消任何正在播放的动画。

  • Compose自定义动画
    AnimationSpec 可以自定义动画的行为,效果类似于原生动画中的估值器。
    image.png

六、Compose图形

  • Compose Canvas
    自定义图形的核心可组合项是 Canvas。在布局中放置 Canvas 的方式与放置其他 Compose界面元素相同。在 Canvas 中,开发人员可以通过精确控制元素的样式和位置来绘制元素。

  • Compose 绘制API的分析
    Canvas Composable 是官方提供的一个专门用来自定义绘制的独立组件,这个组件不包含任何子元素,类似于传统View系统中的一个独立View(不是ViewGroup,不包含子View)。Canvas参数有两个参数, 类型分别是 Modifier 与 DrawScope.() -> Unit。
    Modifier 作为该组件的修饰符不难理解, DrawScope.() -> Unit 是一个 reciever 为
    DrawScope 类型的 lambda。那么我们就可以在 lambda 中任意使⽤用DrawScope 为我们所
    提供的 API 了。

  • Compose自定义绘制
    对于自定义绘制,官方为我们提供了三个Modifier API,分别是drawWithContent、drawBehind 、drawWithCache。
    image.png

七、Compose核心控件总结

  • Scaffold
    在Compose中提供了一种脚手架Scaffold的控件帮助开发者快速开发。在Scaffold中提供了很多配件,比如顶部菜单栏、侧滑菜单、底部菜单栏等。并且除了默认的Scaffold外,还有一些类似的控件,比如BackdropScaffold、BottomSheetScaffold等等。
  • LazyColumn
    image.png

内含的实战案例、源码等内容可以扫码免费领取完整指南阅读学习~
在这里插入图片描述

另外点赞+评论本文章,《Android编程入门教程》、《Android性能优化实战》、《2022Android中高级面试题汇总》、《Android架构开发手册》都可以一同领取↓↓↓

Android编程入门教程》:
《Android编程入门教程》
《Android性能优化实战》
《Android性能优化实战》
《2022Android中高级面试题汇总》
2022Android中高级面试题汇总
《Android架构开发手册》
Android架构开发手册

以上就是本文的全部内容,感谢你的阅读,如果觉得不错,请点赞、评论、收藏三连一波。

标签:动画,Compose,函数,自定义,JetPack,王者,Android
来源: https://blog.csdn.net/weixin_48091641/article/details/122072888

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有