在dialog中添加如下代码:
// 动画持续的时间
private final int mAnimDuration = 250;
// 显示按钮布局的动画
private ObjectAnimator mShowAnim = null;
// 隐藏按钮布局的动画
private ObjectAnimator mHideAnim = null;
// 屏幕参数对象
private DisplayMetrics mDm = null;
/**
* 初始化显示和隐藏动画
*/
private void initAnim() {
/** 初始化显示动画 */
mShowAnim = ObjectAnimator.ofFloat(ll_root, "translationX", (int) (mDm.widthPixels * 0.8), 0);
mShowAnim.setDuration(mAnimDuration);
mShowAnim.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
// 动画结束之后,设置背景View可点击
tvMycourseTotal.setClickable(true);
}
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
});
/**初始化隐藏动画 */
mHideAnim = ObjectAnimator.ofFloat(ll_root, "translationX", 0, (int) (mDm.widthPixels * 0.8));
mHideAnim.setDuration(mAnimDuration);
mHideAnim.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
// 动画结束之后,设置背景View可点击,并隐藏dialog
tvMycourseTotal.setClickable(true);
dismiss();
}
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
});
}
其中 ll_root为Dialog的根布局。
在显示Dialog的时候调用:
mShowAnim.start(); 即在show()方法中调用
在关闭Dialog的时候调用:
mHideAnim.start(); 在dismiss()方法之前调用
原理解析:在显示dialog的时候让根布局实现从右到左滑入的动画,即可。在dismiss()之前让dialog的根布局先实现从右向左滑入的动画,在动画监听结束的时候,调用dialog的dismiss()方法,即可。
以此类推,我们可以自定义实现各种显示、隐藏的动画,只需要改变(mShowAnim、mHideAnim)动画的设置即可。
我们知道在Activity和PopWindow都可以设置style写translate的xml文件实现,dialog并没有设置style的方法,设置了也不起作用,只能用动画实现了。