參考文獻:http://blog.csdn.net/lhs286266503/article/details/6996981
http://archive.cnblogs.com/a/2176653/
Dialog不同於view/PopupWindow,如果需要更改Dialog顯示的位置,一般是更新窗口顯示,直接上代碼吧。
與PopupWindow一樣,顯示定義相關的動畫文件:
(1)定義動畫文件
在res/anim文件夾下定義相關的動畫xml文件,可參考【android】動畫效果研究(view)【1】
(2)定義style.xml文件
在res/value文件夾下定義style.xml文件,可參考【android】動畫效果研究(PopupWindow)【3】
(3)繼承Dialog,重寫showDialog函數
public class UTDialogAnimation extends Dialog{ private Window window = null; public UTDialogAnimation(Context context) { super(context); } public void showDialog(int layoutResID, int x, int y){ setContentView(layoutResID); windowDeploy(x, y); //設置觸摸對話框意外的地方取消對話框 setCanceledOnTouchOutside(true); show(); } //設置窗口顯示 public void windowDeploy(int x, int y){ window = getWindow(); //得到對話框 window.setWindowAnimations(R.style.toast_anim); //設置窗口彈出動畫 //window.setBackgroundDrawableResource(R.color.vifrification); //設置對話框背景為透明 WindowManager.LayoutParams wl = window.getAttributes(); //根據x,y坐標設置窗口需要顯示的位置 wl.x = x; //x小於0左移,大於0右移 wl.y = y; //y小於0上移,大於0下移 // wl.alpha = 0.6f; //設置透明度 // wl.gravity = Gravity.BOTTOM; //設置重力 window.setAttributes(wl); } }
(4)在代碼中new UTDialogAnimation
new UTDialogAnimation(mainActivity.this).showDialog(R.layout.dialog, 80, 50);
因為某些原因,如果硬件或者底層不支持style,所以以上方法在項目中不可選。另外,Dialog沒有像Popupwindow.update()更新位置的接口,所以像【android】動畫效果研究(view/PopupWindow)【2】 調用java-universal-tween-engine動畫系統庫的方法也沒起作用。迄今為止沒有找到對於Dialog執行動畫效果的另一種方法,如果有高手,麻煩提個意見。