求个a站,网站开发的技术简介是什么,湖北网站建设,网站界面设计的流程Android开发教程案例源码分享-匹配动画多个头像飘动效果
匹配往往出现多个头像飘动#xff0c;吸引人点击#xff0c;有时出现的位置还不固定
一、思路#xff1a;
用MotionLayout
二、效果图#xff1a; 看视频更直观点#xff1a; Android开发教程案例源码分享-匹配…Android开发教程案例源码分享-匹配动画多个头像飘动效果
匹配往往出现多个头像飘动吸引人点击有时出现的位置还不固定
一、思路
用MotionLayout
二、效果图 看视频更直观点 Android开发教程案例源码分享-匹配动画多个头像飘动效果 三、关键代码
xml布局
?xml version1.0 encodingutf-8?
androidx.constraintlayout.widget.ConstraintLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentxmlns:apphttp://schemas.android.com/apk/res-autoandroid:backgroundcolor/color_1F1C4Candroidx.core.widget.NestedScrollViewandroid:layout_widthmatch_parentandroid:layout_height0dpapp:layout_constraintTop_toTopOfparentapp:layout_constraintBottom_toBottomOfparentFrameLayoutandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroidx.constraintlayout.widget.ConstraintLayoutandroid:idid/cl_img_animandroid:layout_widthdimen/dp_240android:layout_heightdimen/dp_240android:layout_gravitycenter_horizontalandroid:layout_marginTopdimen/dp_70ImageViewandroid:idid/iv_video_matchandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:srcmipmap/img_video_match//androidx.constraintlayout.widget.ConstraintLayoutandroidx.constraintlayout.motion.widget.MotionLayoutandroid:idid/cl_amin1android:layout_widthmatch_parentandroid:layout_heightdimen/dp_340android:layout_marginTopdimen/dp_20app:layoutDescriptionxml/activity_video_match_scene1ImageViewandroid:idid/iv_anim1android:layout_widthdimen/dp_50android:layout_heightdimen/dp_50app:layout_constraintLeft_toLeftOfparentapp:layout_constraintRight_toRightOfparentapp:layout_constraintTop_toTopOfparentapp:layout_constraintBottom_toBottomOfparentandroid:scaleTypecenterCropandroid:srcmipmap/yishi//androidx.constraintlayout.motion.widget.MotionLayoutandroidx.constraintlayout.motion.widget.MotionLayoutandroid:idid/cl_amin2android:layout_widthmatch_parentandroid:layout_heightdimen/dp_340android:layout_marginTopdimen/dp_20app:layoutDescriptionxml/activity_video_match_scene2ImageViewandroid:idid/iv_anim2android:layout_widthdimen/dp_50android:layout_heightdimen/dp_50app:layout_constraintLeft_toLeftOfparentapp:layout_constraintRight_toRightOfparentapp:layout_constraintTop_toTopOfparentapp:layout_constraintBottom_toBottomOfparentandroid:srcmipmap/yishi2android:scaleTypecenterCrop//androidx.constraintlayout.motion.widget.MotionLayoutandroidx.constraintlayout.motion.widget.MotionLayoutandroid:idid/cl_amin3android:layout_widthmatch_parentandroid:layout_heightdimen/dp_340android:layout_marginTopdimen/dp_20app:layoutDescriptionxml/activity_video_match_scene3ImageViewandroid:idid/iv_anim3android:layout_widthdimen/dp_50android:layout_heightdimen/dp_50app:layout_constraintLeft_toLeftOfparentapp:layout_constraintRight_toRightOfparentapp:layout_constraintTop_toTopOfparentapp:layout_constraintBottom_toBottomOfparentandroid:srcmipmap/yishi3android:scaleTypecenterCrop//androidx.constraintlayout.motion.widget.MotionLayoutandroidx.constraintlayout.motion.widget.MotionLayoutandroid:idid/cl_amin4android:layout_widthmatch_parentandroid:layout_heightdimen/dp_340android:layout_marginTopdimen/dp_20app:layoutDescriptionxml/activity_video_match_scene4ImageViewandroid:idid/iv_anim4android:layout_widthdimen/dp_50android:layout_heightdimen/dp_50app:layout_constraintLeft_toLeftOfparentapp:layout_constraintRight_toRightOfparentapp:layout_constraintTop_toTopOfparentapp:layout_constraintBottom_toBottomOfparentandroid:srcmipmap/yishi4android:scaleTypecenterCrop//androidx.constraintlayout.motion.widget.MotionLayoutandroidx.constraintlayout.motion.widget.MotionLayoutandroid:idid/cl_amin5android:layout_widthmatch_parentandroid:layout_heightdimen/dp_340android:layout_marginTopdimen/dp_20app:layoutDescriptionxml/activity_video_match_scene5ImageViewandroid:idid/iv_anim5android:layout_widthdimen/dp_50android:layout_heightdimen/dp_50app:layout_constraintLeft_toLeftOfparentapp:layout_constraintRight_toRightOfparentapp:layout_constraintTop_toTopOfparentapp:layout_constraintBottom_toBottomOfparentandroid:srcmipmap/yishi5android:scaleTypecenterCrop//androidx.constraintlayout.motion.widget.MotionLayoutandroidx.constraintlayout.motion.widget.MotionLayoutandroid:idid/cl_amin6android:layout_widthmatch_parentandroid:layout_heightdimen/dp_340android:layout_marginTopdimen/dp_20app:layoutDescriptionxml/activity_video_match_scene6ImageViewandroid:idid/iv_anim6android:layout_widthdimen/dp_50android:layout_heightdimen/dp_50app:layout_constraintLeft_toLeftOfparentapp:layout_constraintRight_toRightOfparentapp:layout_constraintTop_toTopOfparentapp:layout_constraintBottom_toBottomOfparentandroid:srcmipmap/yishi6android:scaleTypecenterCrop//androidx.constraintlayout.motion.widget.MotionLayoutandroidx.constraintlayout.motion.widget.MotionLayoutandroid:idid/cl_amin7android:layout_widthmatch_parentandroid:layout_heightdimen/dp_340android:layout_marginTopdimen/dp_20app:layoutDescriptionxml/activity_video_match_scene7ImageViewandroid:idid/iv_anim7android:layout_widthdimen/dp_50android:layout_heightdimen/dp_50app:layout_constraintLeft_toLeftOfparentapp:layout_constraintRight_toRightOfparentapp:layout_constraintTop_toTopOfparentapp:layout_constraintBottom_toBottomOfparentandroid:srcmipmap/yishi7android:scaleTypecenterCrop//androidx.constraintlayout.motion.widget.MotionLayout/FrameLayout/androidx.core.widget.NestedScrollView/androidx.constraintlayout.widget.ConstraintLayoutkotlin代码
package com.cong.mymoreheadanimimport androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.view.View
import androidx.constraintlayout.motion.widget.MotionLayout
import com.cong.mymoreheadanim.databinding.ActivityVideoMatchBinding
import com.zailiaoliao.lib.image.ImageLoaderclass MainActivity : AppCompatActivity() {lateinit var mBinding:ActivityVideoMatchBindingprivate var isStart2 falseprivate var isStart3 falseprivate var isStart4 falseprivate var isStart5 falseprivate var isStart6 falseprivate var isStart7 falseprivate var isStartAnim1 falseoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)mBinding ActivityVideoMatchBinding.inflate(layoutInflater)setContentView(mBinding.root)ImageLoader.loadAvatar(mBinding.ivAnim1,R.mipmap.yishi)ImageLoader.loadAvatar(mBinding.ivAnim2,R.mipmap.yishi2)ImageLoader.loadAvatar(mBinding.ivAnim3,R.mipmap.yishi3)ImageLoader.loadAvatar(mBinding.ivAnim4,R.mipmap.yishi4)ImageLoader.loadAvatar(mBinding.ivAnim5,R.mipmap.yishi5)ImageLoader.loadAvatar(mBinding.ivAnim6,R.mipmap.yishi6)ImageLoader.loadAvatar(mBinding.ivAnim7,R.mipmap.yishi7)dealAnimListener()}override fun onResume() {super.onResume()if (!isStartAnim1){Handler().postDelayed({mBinding.clAmin1.transitionToStart()mBinding.clAmin1.setTransition(R.id.left_to_right)mBinding.clAmin1.transitionToEnd()isStartAnim1 true},500)}}private fun dealAnimListener(){mBinding.clAmin1.addTransitionListener(object : MotionLayout.TransitionListener{override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {mBinding.ivAnim1.visibility View.VISIBLE}override fun onTransitionChange(p0: MotionLayout?, p1: Int, p2: Int, p3: Float) {if (p3 0.2f !isStart2){mBinding.clAmin2.transitionToStart()mBinding.clAmin2.setTransition(R.id.left_to_right2)mBinding.clAmin2.transitionToEnd()isStart2 true}}override fun onTransitionCompleted(p0: MotionLayout, p1: Int) {isStart2 false}override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) {}})mBinding.clAmin2.addTransitionListener(object : MotionLayout.TransitionListener{override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {mBinding.ivAnim2.visibility View.VISIBLE}override fun onTransitionChange(p0: MotionLayout?, p1: Int, p2: Int, p3: Float) {if (p3 0.2f !isStart3){mBinding.clAmin3.transitionToStart()mBinding.clAmin3.setTransition(R.id.left_to_right3)mBinding.clAmin3.transitionToEnd()isStart3 true}}override fun onTransitionCompleted(p0: MotionLayout, p1: Int) {isStart3 false}override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) {}})mBinding.clAmin3.addTransitionListener(object : MotionLayout.TransitionListener{override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {mBinding.ivAnim3.visibility View.VISIBLE}override fun onTransitionChange(p0: MotionLayout?, p1: Int, p2: Int, p3: Float) {if (p3 0.5f !isStart4){mBinding.clAmin4.transitionToStart()mBinding.clAmin4.setTransition(R.id.left_to_right4)mBinding.clAmin4.transitionToEnd()isStart4 true}}override fun onTransitionCompleted(p0: MotionLayout, p1: Int) {isStart4 false}override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) {}})mBinding.clAmin4.addTransitionListener(object : MotionLayout.TransitionListener{override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {mBinding.ivAnim4.visibility View.VISIBLE}override fun onTransitionChange(p0: MotionLayout?, p1: Int, p2: Int, p3: Float) {if (p3 0.3f !isStart5){mBinding.clAmin5.transitionToStart()mBinding.clAmin5.setTransition(R.id.left_to_right5)mBinding.clAmin5.transitionToEnd()isStart5 true}}override fun onTransitionCompleted(p0: MotionLayout, p1: Int) {isStart5 false}override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) {}})mBinding.clAmin5.addTransitionListener(object : MotionLayout.TransitionListener{override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {mBinding.ivAnim5.visibility View.VISIBLE}override fun onTransitionChange(p0: MotionLayout?, p1: Int, p2: Int, p3: Float) {if (p3 0.3f !isStart6){mBinding.clAmin6.transitionToStart()mBinding.clAmin6.setTransition(R.id.left_to_right6)mBinding.clAmin6.transitionToEnd()isStart6 true}}override fun onTransitionCompleted(p0: MotionLayout, p1: Int) {isStart6 false}override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) {}})mBinding.clAmin6.addTransitionListener(object : MotionLayout.TransitionListener{override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {mBinding.ivAnim6.visibility View.VISIBLE}override fun onTransitionChange(p0: MotionLayout?, p1: Int, p2: Int, p3: Float) {if (p3 0.3f !isStart7){mBinding.clAmin7.transitionToStart()mBinding.clAmin7.setTransition(R.id.left_to_right7)mBinding.clAmin7.transitionToEnd()isStart7 true}}override fun onTransitionCompleted(p0: MotionLayout, p1: Int) {isStart7 falsemBinding.ivAnim1.visibility View.GONEmBinding.clAmin1.transitionToStart()mBinding.clAmin1.setTransition(R.id.left_to_right)mBinding.clAmin1.transitionToEnd()}override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) {}})mBinding.clAmin7.addTransitionListener(object : MotionLayout.TransitionListener{override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {mBinding.ivAnim7.visibility View.VISIBLE}override fun onTransitionChange(p0: MotionLayout?, p1: Int, p2: Int, p3: Float) {}override fun onTransitionCompleted(p0: MotionLayout, p1: Int) {}override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) {}})}
}项目demo源码结构图 有问题或者需要demo源码的私信我