Android 底部滑上滑下动画的Dialog及它的WindowManager.LayoutParams设置

/**   
 * @Description: 
 * @author stone
 * @email  aa86799@163.com
 */
public class  MyDialog extends Dialog {
	
	private Animation mShowAnim;
	private Animation mHideAnim;
	private View mMainLayout;

	/**
	 * @param context
	 */
	public  MyDialog(Context context) {
		super(context);

		createShowAnim();
		createHideAnim();
		
		//mMainLayout = ...
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {		
		setContentView(mMainLayout);
	}
	
	private void createShowAnim() {
		mShowAnim = new TranslateAnimation(1, 0, 1, 0, 1, 1, 1, 0);
		mShowAnim.setDuration(500);
	}
	
	private void createHideAnim() {
		mHideAnim = new TranslateAnimation(1, 0, 1, 0, 1, 0, 1, 1);
		mHideAnim.setDuration(500);
	}

	@Override
	public void show() {
		super.show();
		mMainLayout.startAnimation(mShowAnim);
	}
	
	private void dismissDialog() {
		super.dismiss();
	}
	
	@Override
	public void dismiss() {
		mHideAnim.setAnimationListener(new AnimationListener() {
			
			@Override
			public void onAnimationStart(Animation animation) {
				
			}
			
			@Override
			public void onAnimationRepeat(Animation animation) {
				
			}
			
			@Override
			public void onAnimationEnd(Animation animation) {
				dismissDialog();
			}
		});
		mMainLayout.startAnimation(mHideAnim);
	}
	
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_MENU) {
			dismiss();
		}
		return super.onKeyDown(keyCode, event);
	}
}

MyDialog myDialog = new MyDialog(context);
WindowManager.LayoutParams params = myDialog.getWindow().getAttributes();
params.alpha = 0.8f; //窗口透明度
params.width =  mScreenWidth - 80;
params.height =  mScreenHeight / 4;
params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
myDialog.getWindow().setAttributes(params);
//必须设置一个背景,否则会有系统的Dialog样式:外部白框
myDialog.getWindow().setBackgroundDrawableResource(R.drawable.translate);

设置的背景必须是Drawable对象或Drawable资源的id。

res/drawable/translate.xml

<?xml version="1.0" encoding="utf-8"?>
<color xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="#00000000">
</color>

----------------------------------------------------------------------------------------------------------------------------------------------------------------

刚一哥们跟我说,网上流行的是这样的实现方法:

mWindow.setWindowAnimations(R.style.dialog);  //添加动画  

res/values/styles.xml

<style name="dialog" parent="android:Animation">    
    <item name="@android:windowEnterAnimation">@anim/dialog_enter</item>  
    <item name="@android:windowExitAnimation">@anim/dialog_exit</item>  
</style> 

dialog_enter.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="500"
        android:fromYDelta="100%p" />
</set>


dialog_exit.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="500"
        android:toYDelta="100%p" />
</set>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值