属性动画
Kotlin实现:package com.net.calendardemoimport android.animation.AnimatorSetimport android.animation.ObjectAnimatorimport android.os.Bundleimport android.support.v7.app.AppCompatActivityimport an...
·

Kotlin实现:
package com.net.calendardemo
import android.animation.AnimatorSet
import android.animation.ObjectAnimator
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.widget.ImageView
import kotlinx.android.synthetic.main.activity_anim.*
class AnimatorActivity : AppCompatActivity() {
private var isOpen = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_anim)
root.setOnClickListener {
if (!isOpen) {
isOpen = true
transation(root1, 0.0f, -400.0f, 500)
transation(
root2,
-(Math.cos(Math.toRadians(66.0)) * 400).toFloat(),
-(Math.sin(Math.toRadians(66.0)) * 400).toFloat(),
500
)
transation(
root3,
-(Math.cos(Math.toRadians(44.0)) * 400).toFloat(),
-(Math.sin(Math.toRadians(44.0)) * 400).toFloat(),
500
)
transation(
root4,
-(Math.cos(Math.toRadians(22.0)) * 400).toFloat(),
-(Math.sin(Math.toRadians(22.0)) * 400).toFloat(),
500
)
transation(root5, -400.0f, 0.0f, 500)
} else {
isOpen = false
transationClose(root1, 0.0f, 400.0f, 500)
transationClose(
root2,
(Math.cos(Math.toRadians(66.0)) * 400).toFloat(),
(Math.sin(Math.toRadians(66.0)) * 400).toFloat(),
500
)
transationClose(
root3,
(Math.cos(Math.toRadians(44.0)) * 400).toFloat(),
(Math.sin(Math.toRadians(44.0)) * 400).toFloat(),
500
)
transationClose(
root4,
(Math.cos(Math.toRadians(22.0)) * 400).toFloat(),
(Math.sin(Math.toRadians(22.0)) * 400).toFloat(),
500
)
transationClose(root5, 400.0f, 0.0f, 500)
}
}
}
private fun transation(view: ImageView, transationx: Float, transationy: Float, time: Long) {
val animatorSet = AnimatorSet()
val animatorx = ObjectAnimator.ofFloat(view, "translationX", 0f, transationx)
animatorx.duration = time
val animatory = ObjectAnimator.ofFloat(view, "translationY", 0f, transationy)
animatory.duration = time
val animatorScaleX = ObjectAnimator.ofFloat(view, "scaleX", 0f, 1.0f)
animatorScaleX.duration = time
val animatorScaleY = ObjectAnimator.ofFloat(view, "scaleY", 0f, 1.0f)
animatorScaleY.duration = time
val animatorAlpha = ObjectAnimator.ofFloat(view, "alpha", 0f, 1.0f)
animatorAlpha.duration = time
animatorSet.playTogether(animatorx, animatory, animatorScaleX, animatorScaleY, animatorAlpha)
animatorSet.start()
}
private fun transationClose(view: ImageView, transationx: Float, transationy: Float, time: Long) {
val animatorSet = AnimatorSet()
val animatorx = ObjectAnimator.ofFloat(view, "translationX", -transationx, 0f)
animatorx.duration = time
val animatory = ObjectAnimator.ofFloat(view, "translationY", -transationy, 0f)
animatory.duration = time
val animatorScaleX = ObjectAnimator.ofFloat(view, "scaleX", 1.0f, 0f)
animatorScaleX.duration = time
val animatorScaleY = ObjectAnimator.ofFloat(view, "scaleY", 1.0f, 0.0f)
animatorScaleY.duration = time
val animatorAlpha = ObjectAnimator.ofFloat(view, "alpha", 1.0f, 0.0f)
animatorAlpha.duration = time
animatorSet.playTogether(animatorx, animatory, animatorScaleX, animatorScaleY, animatorAlpha)
animatorSet.start()
}
}
xml布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginRight="30dp"
android:layout_marginBottom="30dp"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:id="@+id/root"
android:src="@drawable/wangguan"/>
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginRight="30dp"
android:layout_marginBottom="30dp"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:id="@+id/root1"
android:src="@drawable/wangguan"/>
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginRight="30dp"
android:layout_marginBottom="30dp"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:id="@+id/root2"
android:src="@drawable/wangguan"/>
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginRight="30dp"
android:layout_marginBottom="30dp"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:id="@+id/root3"
android:src="@drawable/wangguan"/>
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginRight="30dp"
android:layout_marginBottom="30dp"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:id="@+id/root4"
android:src="@drawable/wangguan"/>
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginRight="30dp"
android:layout_marginBottom="30dp"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:id="@+id/root5"
android:src="@drawable/wangguan"/>
</RelativeLayout>
参考:https://wiki.jikexueyuan.com/project/android-animation/10.html
更多推荐



所有评论(0)