需求
實現(xiàn)一個對話框刁卜,它出現(xiàn)時,從底部向上逐漸移動出現(xiàn)驯鳖,關閉時,逐漸向下移除屏幕:
1.點擊 顯示 按鈕時溪北,一個dialog對話框從底部慢慢向上彈出智玻。
2.關閉dialog時遂唧, dialog緩慢的移動向底部消失。很平滑的效果吊奢。
實現(xiàn)方式:
先制作一個style 資源文件盖彭,創(chuàng)建 mystyle
<style name="mystyle" parent="android:Animation">
<item name="@android:windowEnterAnimation">@anim/dialog_enter</item>
<item name="@android:windowExitAnimation">@anim/dialog_exit</item>
</style>
在這個mystyle中使用了兩個動畫,如下:
進入時的動畫 dialog_enter.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="600"
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="600"
android:toYDelta="100%p" />
</set>
在activity中,指定對話框的 window的 setWindowAnimations页滚,指定一個動畫
public class MainActivity extends Activity {
Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(mOnClickListener);
}
OnClickListener mOnClickListener = new View.OnClickListener(){
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
.setTitle("title").setMessage("message").create();
Window window = dialog.getWindow();
window.setGravity(Gravity.BOTTOM); //此處可以設置dialog顯示的位置
window.setWindowAnimations(R.style.mystyle); //添加動畫
dialog.show();
}
};
}
代碼解釋:
- 為 dialog 所在的windows 設置了一個 動畫樣式 style
- 該style 指定了 窗體(windows)進入的動畫(dialog_enter) 和離開的動畫 (dialog_exit)
- 在進入時的動畫dialog_enter 中召边,寫了一個 translate 的變化,指定從 其父容器的 100% 位置開始裹驰。 其父容器的 100% 位置 是 屏幕以外的位置隧熙,是看不到,這是一個開始點幻林。沒有指定結束點贞盯,結束點就默認 本身應該顯示的位置(即將顯示的位置)。
- 同理沪饺,dialog_exit定義了離開時動畫躏敢。該動畫未指定開始位置,指定了結束位置是 其父容器的 100% 位置 整葡,這樣就慢慢的向下消失在屏幕以外件余。
android:toYDelta="100%p" 中的 100% 指示了 其父容器的 100% 位置
而如果寫成
android:toYDelta="100%",即是指示了 起自身的 100% 位置遭居。