Android开发Android 技术文章自定义view

MotionLayout入门

2019-12-06  本文已影响0人  洛城夜雨
image

What is MotionLayout?

MotionLayout is a layout type that helps you manage motion and widget animation in your app. MotionLayout is a subclass of ConstraintLayout and builds upon its rich layout capabilities. As part of the ConstraintLayout library, MotionLayout is available as a support library and is backwards-compatible to API level 14.

MotionLayout bridges the gap between layout transitions and complex motion handling, offering a mix of features between the property animation framework, TransitionManager, and CoordinatorLayout.

引用自官方文档:Manage motion and widget animation with MotionLayout

通过阅读官方文档我们可以得知MotionLayout的一些信息:

When to use it?

当我们学习一个新的东西的时候,“什么时候(情况下)使用它?”是一个很重要的问题。如果这个问题没想清楚,可能会引发一些不良的效果。

那么,什么时候去用MotionLayout呢?

Use MotionLayout when animating UI elements the user will interact with

当用户需要与有动效的UI元素交互时请使用MotionLayout

言外之意:

  1. 现有实现动效的方式就可以简单实现的就别折腾了,比如用以下方式
  1. 一些界面加载完就直接执行的复杂动画,直接用Gif或者视频搞定的也不需要
  2. 总结一下,别为了用MotionLayout而强行使用

Getting started

在开始使用MotionLayout之前我们需要准备以下几步。

1. Android Studio 4.0

MotionLayout编辑器仅支持4.0之上版本

image

2. 导入依赖

在您app的build.gradle文件添加ConstraintLayout 2.0的依赖。

  1. 如果你使用的是AndroidX

  2. dependencies {
        implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta3'
    }
    
  3. 如果你还没有迁移到AndroidX,则需要使用support 库

    dependencies {
        implementation 'com.android.support.constraint:constraint-layout:2.0.0-beta3'
    } 
    

3. 创建布局文件

创建完fragment_explore_motion_layout_part1.xml布局文件后,在Design模式下,右键点击布局或者Component Tree,选择菜单中的Convert to MotionLayout选项即可一步将布局转换为MotionLayout

image

我们再来看一下该布局的xml代码

image

为了使布局信息与运动描述分开,每个MotionLayout都会使用app:layoutDescription引用一个单独的MotionScene文件,这个文件放在res/xml文件夹。

下面来看一下生成的MotionScene文件:res/xml/fragment_explore_motion_layout_part1_scene.xml

image

4. MotionScene常见的标签及属性

关于更多的MotionScene标签以及它有哪些子标签可以查阅官方文档MotionLayout reference

Basic motion

下面这个栗子包含一个正方形的View,可以水平滑动。

image

Layout XML

MotionLayout的motionDegbug属性可以开启调试模式

  • motionDegbug
    • SHOW_PATH 展示运动路径
    • SHOW_PROGRESS 展示运动进度
    • SHOW_ALL 展示PATH&PROGRESS
image

MotionScene XML

  • KeyPosition

    framePosition=50处向y轴方向偏移50%

  • KeyAttribute

    framePosition=50处改变视图的如下属性:

    • 整体缩放2倍
    • X轴旋转-60°,y轴旋转45°
    • 透明度变为0.3
image

Custom attribute

下面使用ImageFilterView来演示自定义属性

image

Layout XML

image

MotionScene XML

Note:请注意,指定自定义属性时,自定义属性必须在start和end的ConstraintSet元素中成对出现,另外在运动过程中改变自定义属性时,也要保证前面的规则。

  • start中的初始自定义属性

    • roundPercent = 0.1 代表拥有10%的圆角

      取值范围[0~1],0代表正方形,1代表正圆。

    • crossfade = 0 展示src图片

      0=src,1=altsrc

  • end中的最终自定义属性

    • roundPercent = 1 正圆
    • crossfade = 1 展示altsrc图片

详情参见ImageFilterView

image

Summary

探索MotionLayout的Part1到此结束,本文主要介绍了一下MotionLayout是啥?啥时候用它?基础用法....

探索MotionLayout的Part2预计会实现一些更加复杂的效果。

关于本文顶部的效果参见MotionScene文件

Reference

原文链接:http://www.itzhouyang.com/post/explore_motion_layout_part1.html

上一篇 下一篇

猜你喜欢

热点阅读