最新的動(dòng)畫布局來了,一文帶你了解!
大家好,我是劉望舒,騰訊最具價(jià)值專家,著有三本業(yè)內(nèi)知名暢銷書,三本書被中國國家圖書館、各大985名校圖書館收藏,連續(xù)五年蟬聯(lián)電子工業(yè)出版社年度優(yōu)秀作者。
前華為面試官、獨(dú)角獸公司技術(shù)總監(jiān)。
BAT?即可。作者:android超級(jí)兵?
https://blog.csdn.net/weixin_44819566
前言
環(huán)境
system : macOS android studio : 4.1.3 constraintLayout : 2.0.4 gradle : gradle-6.7.1-bin kotlin : 1.4.23
implementation?'androidx.constraintlayout:constraintlayout:2.0.4'
正文









motion:touchAnchorId 指的是您可以滑動(dòng)并拖動(dòng)的視圖。 motion:touchAnchorSide 表示我們從右側(cè)拖動(dòng)視圖。 motion:dragDirection 表示拖動(dòng)的進(jìn)度方向。



圓圈代表一個(gè)視圖的開始或結(jié)束位置。 線條代表一個(gè)視圖的路徑。 菱形代表KeyPosition修改路徑。





motion:motionTarget="@+id/button" 需要移動(dòng)軌跡的view motion:framePosition="[0-100]" framePosition是一個(gè)介于 0 和 100 之間的數(shù)字。它定義了在動(dòng)畫KeyPosition中的應(yīng)用時(shí)間,1 表示 1% 的動(dòng)畫,99 表示 99% 的動(dòng)畫 motion:keyPositionType=“keyPositionType”這是如何KeyPosition修改路徑。它可以是parentRelative,pathRelative,或deltaRelative percentX | percentY是修改路徑的量framePosition(值介于 0.0 和 1.0 之間,允許負(fù)值和值 >1)


pathRelative不需要依靠起始點(diǎn)和結(jié)束點(diǎn)就可以拖動(dòng) deltaRelative 起始點(diǎn)和結(jié)束點(diǎn)在同一x軸上會(huì)導(dǎo)致動(dòng)畫路徑不按照貝塞爾路徑執(zhí)行 而是執(zhí)行一條直線




startVertical 向下的弧形 startHorizontal 向上的弧形 none 直線 flip 和上一個(gè)點(diǎn)如果上一個(gè)點(diǎn)是startVertical,,那么當(dāng)前就是startHorizontal,可以理解為反轉(zhuǎn)

"1.0"?encoding="utf-8"?> "http://schemas.android.com/apk/res/android"
????xmlns:motion="http://schemas.android.com/apk/res-auto">
????????????motion:constraintSetEnd="@+id/end"
????????motion:constraintSetStart="@id/start"
????????motion:duration="1000">
????????
????????????????????motion:clickAction="toggle"
????????????motion:targetId="@id/button6"?/>
????????
????????????
????????????????????????????motion:framePosition="40"
????????????????motion:keyPositionType="deltaRelative"
????????????????motion:motionTarget="@+id/button6"
????????????????motion:pathMotionArc="startVertical"
????????????????motion:percentX="0.358"
????????????????motion:percentY="0.17"?/>
????????????
????????????????????????????motion:framePosition="79"
????????????????motion:keyPositionType="deltaRelative"
????????????????motion:motionTarget="@+id/button6"
????????????????motion:pathMotionArc="flip"
????????????????motion:percentX="0.675"
????????????????motion:percentY="0.568"?/>
????????
????
????
????"@+id/start">
????????
????????????????????android:id="@+id/button6"
????????????android:layout_width="80dp"
????????????android:layout_height="80dp"
????????????motion:layout_constraintBottom_toBottomOf="parent"
????????????motion:layout_constraintLeft_toLeftOf="parent"
????????????motion:layout_constraintTop_toTopOf="parent"
????????????motion:pathMotionArc="startVertical"?/>
????
????
????
????"@+id/end">
????????????????????android:id="@+id/button6"
????????????android:layout_width="64dp"
????????????android:layout_height="64dp"
????????????motion:layout_constraintBottom_toBottomOf="parent"
????????????motion:layout_constraintRight_toRightOf="parent"?/>
????

"1.0"?encoding="utf-8"?> "1.0"?encoding="utf-8"?> "http://schemas.android.com/apk/res/android"
????xmlns:motion="http://schemas.android.com/apk/res-auto">
????????????motion:constraintSetEnd="@+id/結(jié)束了"
????????motion:constraintSetStart="@id/開始了"
????????motion:duration="1000">
????????
????????????
????????????????????????????motion:motionTarget="@+id/button7"
????????????????motion:framePosition="22"
????????????????android:alpha="0.2"?/>
????????
????????????????????motion:clickAction="toggle"
????????????motion:targetId="@id/button7"?/>
????
????
????"@+id/開始了">
????????????????????android:id="@+id/button7"
????????????android:layout_width="60dp"
????????????android:layout_height="60dp"
????????????motion:layout_constraintBottom_toBottomOf="parent"
????????????motion:layout_constraintLeft_toLeftOf="parent"
????????????motion:layout_constraintTop_toTopOf="parent"?/>
????
????
????"@+id/結(jié)束了">
????????????????????android:id="@+id/button7"
????????????android:layout_width="60dp"
????????????android:layout_height="60dp"
????????????motion:layout_constraintBottom_toBottomOf="parent"
????????????motion:layout_constraintRight_toRightOf="parent"
????????????motion:layout_constraintTop_toTopOf="parent"?/>
????
mlns:android="http://schemas.android.com/apk/res/android"
????xmlns:motion="http://schemas.android.com/apk/res-auto">
????????????motion:constraintSetEnd="@+id/end"
????????motion:constraintSetStart="@id/start"
????????motion:duration="1000">
????????
????????????????????motion:clickAction="toggle"
????????????motion:targetId="@id/button6"?/>
????????
????????????
????????????????????????????motion:framePosition="40"
????????????????motion:keyPositionType="deltaRelative"
????????????????motion:motionTarget="@+id/button6"
????????????????motion:pathMotionArc="startVertical"
????????????????motion:percentX="0.358"
????????????????motion:percentY="0.17"?/>
????????????
????????????????????????????motion:framePosition="79"
????????????????motion:keyPositionType="deltaRelative"
????????????????motion:motionTarget="@+id/button6"
????????????????motion:pathMotionArc="flip"
????????????????motion:percentX="0.675"
????????????????motion:percentY="0.568"?/>
????????
????
????
????"@+id/start">
????????
????????????????????android:id="@+id/button6"
????????????android:layout_width="80dp"
????????????android:layout_height="80dp"
????????????motion:layout_constraintBottom_toBottomOf="parent"
????????????motion:layout_constraintLeft_toLeftOf="parent"
????????????motion:layout_constraintTop_toTopOf="parent"
????????????motion:pathMotionArc="startVertical"?/>
????
????
????
????"@+id/end">
????????????????????android:id="@+id/button6"
????????????android:layout_width="64dp"
????????????android:layout_height="64dp"
????????????motion:layout_constraintBottom_toBottomOf="parent"
????????????motion:layout_constraintRight_toRightOf="parent"?/>
????


android:visibility android:alpha android:elevation android:rotation android:rotationX android:rotationY android:scaleX android:scaleY android:translationX android:translationY android:translationZ
"1.0"?encoding="utf-8"?> "http://schemas.android.com/apk/res/android"
????xmlns:motion="http://schemas.android.com/apk/res-auto">
????????????motion:constraintSetEnd="@+id/end"
????????motion:constraintSetStart="@id/start"
????????motion:duration="1000">
????????
????????????????????motion:clickAction="toggle"
????????????motion:targetId="@id/imageView8"?/>
????????
????????????
????????????????????????????android:rotation="-720"
????????????????motion:framePosition="100"
????????????????motion:motionTarget="@id/imageView8"?/>
????????????
????????????????????????????motion:framePosition="0"
????????????????motion:motionTarget="@id/imageView8">
????????????????????????????????????motion:attributeName="colorFilter"
????????????????????motion:customColorValue="#000000"?/>
????????????
????????????
????????????????????????????motion:framePosition="50"
????????????????motion:motionTarget="@id/imageView8">
????????????????????????????????????motion:attributeName="colorFilter"
????????????????????motion:customColorValue="#E91E63"?/>
????????????
????????????
????????????????????????????motion:framePosition="100"
????????????????motion:motionTarget="@id/imageView8">
????????????????????????????????????motion:attributeName="colorFilter"
????????????????????motion:customColorValue="#000000"?/>
????????????
????????
????
????"@+id/start"?...?/>
????"@+id/end"?...?/>
Color Integer Float String Dimension Boolean


????????motion:constraintSetEnd="@+id/end"
????????motion:constraintSetStart="@id/start"
????????motion:duration="1000">
????????
????????
????????
????????????
??????????????????????????????android:alpha="0.5"
????????????????android:scaleY="1.2"
????????????????android:scaleX="1.2"
????????????????motion:framePosition="51"
????????????????motion:motionTarget="@+id/imageView8"
????????????????motion:waveOffset="2"
????????????????motion:wavePeriod="1"
????????????????motion:waveShape="sin"?/>
????????
????
motion:waveOffset 添加到屬性的偏移值 motion:wavePeriod 要在此區(qū)域附近循環(huán)的循環(huán)數(shù) motion:waveShape=“cos” sin|square|triangle|sawtooth|reverseSawtooth|cos|bounce


motion:wavePeriod:要在此區(qū)域附近循環(huán)的循環(huán)數(shù)
class?KeyTriggerImageView?@JvmOverloads?constructor(
????context:?Context,?attrs:?AttributeSet??=?null,?defStyleAttr:?Int?=?0
)?:
????AppCompatImageView(context,?attrs,?defStyleAttr)?{
????//?顯示?view
????fun?show()?{
????????visibility?=?View.VISIBLE
????}
????//?隱藏當(dāng)前?view
????fun?hide()?{
????????visibility?=?View.GONE
????}
}
"1.0"?encoding="utf-8"?> "http://schemas.android.com/apk/res/android"
????xmlns:motion="http://schemas.android.com/apk/res-auto">
????????????motion:constraintSetEnd="@+id/end"
????????motion:constraintSetStart="@id/start"
????????motion:duration="2000">
????????
????????????????????motion:clickAction="toggle"
????????????motion:targetId="@id/imageView11"?/>
????????
????????????????????????????motion:framePosition="0"
????????????????motion:motionTarget="@+id/imageView11"
????????????????motion:onCross="show"?/>
????????????????????????????motion:framePosition="20"
????????????????motion:motionTarget="@+id/imageView11"
????????????????motion:onCross="hide"?/>
????????????????????????????motion:framePosition="60"
????????????????motion:motionTarget="@+id/imageView11"
????????????????motion:onCross="show"?/>
????????????????????????????motion:framePosition="79"
????????????????motion:motionTarget="@+id/imageView11"
????????????????motion:onCross="hide"?/>
????????????????????????????motion:framePosition="100"
????????????????motion:motionTarget="@+id/imageView11"
????????????????motion:onCross="show"?/>
????????
????
????"@+id/start"?.../>
????"@+id/end"?.../>
motion:onCross 調(diào)用的方法名字 motion:framePosition 當(dāng)前是第幾幀 (0-100) motion:motionTarget 設(shè)置的控件id



"1.0"?encoding="utf-8"?> "http://schemas.android.com/apk/res/android"
????xmlns:motion="http://schemas.android.com/apk/res-auto">
????????????motion:constraintSetEnd="@+id/end"
????????motion:constraintSetStart="@id/start"
????????motion:duration="1000">
????????
????????????????????motion:clickAction="toggle"
????????????motion:targetId="@id/imageView13"?/>
????????
????????
????
????
????"@+id/start">
??????????
????????????????????android:id="@+id/imageView13"
????????????android:layout_width="100dp"
????????????android:layout_height="100dp"
????????????motion:layout_constraintBottom_toBottomOf="parent"
????????????motion:layout_constraintLeft_toLeftOf="parent"
????????????motion:transitionEasing="acclerate"?/>
????
????
????"@+id/end">
????????????????????android:id="@+id/imageView13"
????????????android:layout_width="100dp"
????????????android:layout_height="100dp"
????????????motion:layout_constraintRight_toRightOf="parent"
????????????motion:layout_constraintTop_toTopOf="parent"?/>
????


類似皮皮蝦點(diǎn)擊評(píng)論功能 點(diǎn)擊評(píng)論按鈕時(shí)候,圖片縮小,底下彈出一個(gè)recyclerview來顯示評(píng)論 recyclerview顯示的時(shí)候,評(píng)論按鈕不顯示 recyclerview不顯示的時(shí)候,評(píng)論按鈕顯示
"1.0"?encoding="utf-8"?> "http://schemas.android.com/apk/res/android"
????xmlns:motion="http://schemas.android.com/apk/res-auto">
????????????motion:constraintSetEnd="@+id/end"
????????motion:constraintSetStart="@id/start"
????????motion:duration="400">
????????????????????motion:clickAction="toggle"
????????????motion:targetId="@id/imageComment"?/>
????????????????????motion:dragDirection="dragUp"
????????????motion:touchAnchorId="@id/recyclerView"?/>
????
????
????"@+id/start">
????????????????????android:id="@+id/image"
????????????android:layout_width="match_parent"
????????????android:layout_height="match_parent"
????????????motion:layout_constraintBottom_toBottomOf="parent"
????????????motion:layout_constraintLeft_toLeftOf="parent"
????????????motion:layout_constraintRight_toRightOf="parent"
????????????motion:layout_constraintTop_toTopOf="parent"?/>
????????????????????android:id="@+id/imageComment"
????????????android:layout_width="40dp"
????????????android:layout_height="40dp"
????????????android:layout_marginRight="@dimen/dp_10"
????????????android:alpha="1"
????????????motion:layout_constraintBottom_toBottomOf="parent"
????????????motion:layout_constraintRight_toRightOf="parent"
????????????motion:layout_constraintTop_toTopOf="parent"
????????????motion:layout_constraintVertical_bias="0.7"?/>
????????????????????android:id="@+id/recyclerView"
????????????android:layout_width="match_parent"
????????????android:layout_height="0dp"
????????????motion:layout_constraintTop_toBottomOf="@id/image"?/>
????
????
????"@+id/end">
????????????????????android:id="@+id/image"
????????????android:layout_width="match_parent"
????????????android:layout_height="0dp"
????????????motion:layout_constraintBottom_toTopOf="@id/recyclerView"
????????????motion:layout_constraintLeft_toLeftOf="parent"
????????????motion:layout_constraintRight_toRightOf="parent"
????????????motion:layout_constraintTop_toTopOf="parent"?/>
????????????????????android:id="@+id/recyclerView"
????????????android:layout_width="match_parent"
????????????android:layout_height="500dp"
????????????motion:layout_constraintBottom_toBottomOf="parent"
????????????motion:layout_constraintTop_toBottomOf="@id/image"?/>
????????????????????android:id="@+id/imageComment"
????????????android:layout_width="40dp"
????????????android:layout_height="40dp"
????????????android:layout_marginRight="@dimen/dp_10"
????????????android:alpha="0"
????????????motion:layout_constraintBottom_toBottomOf="parent"
????????????motion:layout_constraintRight_toRightOf="parent"
????????????motion:layout_constraintTop_toTopOf="parent"
????????????motion:layout_constraintVertical_bias="0.7"?/>
????
????app:constraintSetStart="@+id/start" >
????app:constraintSetEnd="@+id/end"
????app:duration="1000">
????
????
????
????
????
????????????
????????????????????
????????????
????????????
????????????
????????????
????
????????
???????"@id/viewId"
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????
????
????"@+id/end"../>
https://gitee.com/lanyangyangzzz/android_ui/tree/master

? 耗時(shí)2年,Android進(jìn)階三部曲第三部《Android進(jìn)階指北》出版!
為了防止失聯(lián),歡迎關(guān)注我的小號(hào)
??微信改了推送機(jī)制,真愛請(qǐng)星標(biāo)本公號(hào)??
評(píng)論
圖片
表情
