代码很简单,主要原理是通过缩放动画scale来达成视觉效果【翻转过程略带加减速】,不过由于该Dialog是通过Activity来呈现出来,所以当需要关闭该Dialog时是用EventBus发送通知关闭。
1:代表图片原来大小
0:代表图片缩小到没有
思路:A面从 1 缩小到 0 转换成B面 从 0 ->1->0的过程
以下是在 res/anim 文件夹里面的
waiting_first_animation
waiting_second_animation
以下是WaitingDialogActivity
package com.fanlai.app.view.dialog.footDialog;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.TextView;
import com.fanlai.app.R;
import com.fanlai.app.Util.StringUntil;
import com.fanlai.app.bean.WaitintEvent;
import de.greenrobot.event.EventBus;
import de.greenrobot.event.Subscribe;
import de.greenrobot.event.ThreadMode;
/**
* Created by ${baiyu} on 2016/7/12.
*/
public class WaitingDialog extends Activity {
private String text;
private TextView waitText;
private ImageView waitLogo;
private Animation animation;
private boolean bool = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.waiting_dialog);
initView();
doTherThing();
}
private void doTherThing() {
text = getIntent().getStringExtra("dialogText");
if (StringUntil.isNotEmpty(text)) {
waitText.setText(text);
}
EventBus.getDefault().register(this);
setAnimation1();
}
private void setAnimation1() {
animation = AnimationUtils.loadAnimation(WaitingDialog.this, R.anim.waiting_loading1);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
if (bool) {
bool = false;
waitLogo.setBackgroundResource(R.drawable.wait_menu);
} else {
waitLogo.setBackgroundResource(R.drawable.wait_logo);
bool = true;
}
setAnimation2();
}
});
waitLogo.startAnimation(animation);
}
private void setAnimation2() {
animation = AnimationUtils.loadAnimation(WaitingDialog.this, R.anim.waiting_loading2);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
setAnimation1();
}
});
waitLogo.startAnimation(animation);
}
private void initView() {
waitLogo = (ImageView) findViewById(R.id.wait_logo);
waitText = (TextView) findViewById(R.id.loading_text);
}
@Subscribe(threadMode = ThreadMode.MainThread)
public void onShowMessageEvent(WaitintEvent messageEvent) {
finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
waitLogo.setBackground(null);
waitLogo = null;
}
}
avtivity布局