首先看下效果吧..
就是上面的一個效果.
實現方法(這裏使用ImageView 代替 方便)
首先通過RelativeLayout 定義三個 ImageView .最上層的顯示, 其餘兩個隱藏. 在彈出動畫開始的時候顯示出來. 在縮回動畫裏面隱藏
layout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.msh.animation.MainActivity">
<ImageView
android:id="@+id/iv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:src="@mipmap/ic_launcher" />
<ImageView
android:id="@+id/iv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:src="@mipmap/ic_launcher"
android:visibility="gone" />
<ImageView
android:id="@+id/iv3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:src="@mipmap/ic_launcher"
android:visibility="gone" />
</RelativeLayout>
Activity
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.BounceInterpolator;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
ImageView iv1, iv2, iv3, iv4;
boolean isShow = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
iv1 = (ImageView) findViewById(R.id.iv1);
iv1.setOnClickListener(this);
iv2 = (ImageView) findViewById(R.id.iv2);
iv3 = (ImageView) findViewById(R.id.iv3);
iv3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv1:
Toast.makeText(this, "" + -(iv1.getHeight() + 50) * 2, Toast.LENGTH_SHORT).show();
AnimatorSet animatorSet = new AnimatorSet();
ObjectAnimator animator = ObjectAnimator.ofFloat(iv2, "translationY", iv1.getTranslationY(), -(iv1.getHeight() + 50) * 1);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(iv3, "translationY", iv1.getTranslationY(), -(iv1.getHeight() + 50) * 2);
animatorSet.playTogether(animator, animator2);
animatorSet.setDuration(1000);
animatorSet.setInterpolator(new BounceInterpolator());
animatorSet.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
iv2.setVisibility(View.VISIBLE);
iv3.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
animatorSet.start();
break;
case R.id.iv3:
Toast.makeText(this, "" + iv1.getHeight(), Toast.LENGTH_SHORT).show();
AnimatorSet animatorSet2 = new AnimatorSet();
ObjectAnimator animator3 = ObjectAnimator.ofFloat(iv2, "translationY", -(iv1.getHeight() + 50) * 1, 0);
ObjectAnimator animator4 = ObjectAnimator.ofFloat(iv3, "translationY", -(iv1.getHeight() + 50) * 2, 0);
animatorSet2.playTogether(animator3, animator4);
animatorSet2.setDuration(1000);
animatorSet2.setInterpolator(new BounceInterpolator());
animatorSet2.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
iv2.setVisibility(View.GONE);
iv3.setVisibility(View.GONE);
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
animatorSet2.start();
break;
}
}
}
就兩個類. 都不放Demo 了. 沒有其他任何的東西…