美文网首页动画Constraintlayout
Android新控件之MotionLayout 动画管理布局触摸

Android新控件之MotionLayout 动画管理布局触摸

作者: 没有了遇见 | 来源:发表于2022-01-14 17:04 被阅读0次
    效果
    MotionLayout 是一种布局类型,可帮助您管理应用中的运动和微件动画。MotionLayoutConstraintLayout 的子类,在其丰富的布局功能基础之上构建而成。作为 ConstraintLayout 库的一部分,MotionLayout 可用作支持库,并可向后兼容 API 级别 14

    实现:

    1. 设置展示动画的路径
    package com.wu.material
    
    import android.annotation.SuppressLint
    import android.graphics.Rect
    import android.os.Bundle
    import android.widget.FrameLayout
    import android.widget.RelativeLayout
    import android.widget.TextView
    import androidx.appcompat.app.AppCompatActivity
    import androidx.constraintlayout.motion.widget.MotionLayout
    import com.google.android.material.badge.BadgeDrawable
    import com.google.android.material.badge.BadgeUtils
    
    
    /**
     * @author wkq
     *
     * @date 2021年11月04日 16:40
     *
     *@des  触摸平移动画
     *
     */
    
    class MothionLayoutDemo1Activity :AppCompatActivity() {
    
        @SuppressLint("RestrictedApi")
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_mothion_layout_demo)
    
            setShowLines()
        }
    
        /**
         * 设置展示动画路径
         */
        private fun setShowLines() {
           var motionLayout= findViewById<MotionLayout>(R.id.motionLayout)
            motionLayout.setDebugMode(MotionLayout.DEBUG_SHOW_PATH)
        }
    
    
    }
    

    2.xml配置MotionLayout页面

    <?xml version="1.0" encoding="utf-8"?>
    <!-- activity_main.xml -->
    <androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/motionLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layoutDescription="@xml/scene_01">
        <!-- 移动的控件 -->
        <Button
            android:id="@+id/button"
            android:layout_width="200dp"
            android:layout_height="64dp"
            android:text="测试数据"
          />
    
    </androidx.constraintlayout.motion.widget.MotionLayout>
    
    

    3.MotionScene 是一个 XML 资源文件,其中包含相应布局的所有运动描述(scene_01.xml)

    <?xml version="1.0" encoding="utf-8"?>
    <MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:motion="http://schemas.android.com/apk/res-auto">
    
        <!-- 配置动画属性 -->
        <Transition
            motion:constraintSetEnd="@+id/end"
            motion:constraintSetStart="@+id/start"
            motion:duration="1000">
            <!-- 触摸属性 -->
            <OnSwipe
                motion:dragDirection="dragDown"
                motion:touchAnchorId="@+id/button"
                motion:touchAnchorSide="bottom" />
        </Transition>
    
        <!-- 是定义描述您的运动的各种限制条件的位置 -->
        <!-- 开始的View限制 -->
        <ConstraintSet android:id="@+id/start">
            <!-- 条件限制 -->
            <Constraint
                android:id="@+id/button"
                android:layout_width="200dp"
                android:layout_height="64dp"
                motion:layout_constraintEnd_toEndOf="parent"
                motion:layout_constraintStart_toStartOf="parent"
                motion:layout_constraintTop_toTopOf="parent">
                 <!--  自定义条件限制,backgroundColor:方法名,customColorValue:参数类型 并且必须与具有
                 getter 和 setter 方法的对象匹配-->
                <!-- 设置背景色 -->
                <CustomAttribute
                    motion:attributeName="backgroundColor"
                    motion:customColorValue="#D81B60" />
                <!--           设置文字-->
                <CustomAttribute
                    motion:attributeName="text"
                    motion:customStringValue="开始" />
            </Constraint>
        </ConstraintSet>
    
        <!-- 结束的View限制  -->
        <ConstraintSet android:id="@+id/end">
            <Constraint
                android:id="@+id/button"
                android:layout_width="200dp"
                android:layout_height="64dp"
                android:layout_marginBottom="8dp"
                motion:layout_constraintBottom_toBottomOf="parent"
                motion:layout_constraintEnd_toEndOf="parent"
                motion:layout_constraintStart_toStartOf="parent">
    
                <CustomAttribute
                    motion:attributeName="backgroundColor"
                    motion:customColorValue="#9999FF" />
                <CustomAttribute
                    motion:attributeName="text"
                    motion:customStringValue="结束" />
            </Constraint>
        </ConstraintSet>
    
    </MotionScene>
            
    

    总结

    MotionLayout 简单手指跟随滑动动画,和自定义属性渐变背景色以及文字处理

    参考文献

    1.Google的MotionLayout介绍说明

    2.MotionLayout的文档简介

    3.MotionLayout 源码地址

    相关文章

      网友评论

        本文标题:Android新控件之MotionLayout 动画管理布局触摸

        本文链接:https://www.haomeiwen.com/subject/yroacrtx.html