Android開發(fā)(30) 制作從底部向上出現的對話框

需求

實現一個對話框,它出現時,從底部向上逐漸移動出現,關閉時,逐漸向下移除屏幕:

1.點擊 顯示 按鈕時,一個dialog對話框從底部慢慢向上彈出。
2.關閉dialog時, dialog緩慢的移動向底部消失。很平滑的效果。

實現方式:

先制作一個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(); 
        }
        
    }; 
}

代碼解釋:

  1. 為 dialog 所在的windows 設置了一個 動畫樣式 style
  2. 該style 指定了 窗體(windows)進入的動畫(dialog_enter) 和離開的動畫 (dialog_exit)
  3. 在進入時的動畫dialog_enter 中,寫了一個 translate 的變化,指定從 其父容器的 100% 位置開始。 其父容器的 100% 位置 是 屏幕以外的位置,是看不到,這是一個開始點。沒有指定結束點,結束點就默認 本身應該顯示的位置(即將顯示的位置)。
  4. 同理,dialog_exit定義了離開時動畫。該動畫未指定開始位置,指定了結束位置是 其父容器的 100% 位置 ,這樣就慢慢的向下消失在屏幕以外。

android:toYDelta="100%p" 中的 100% 指示了 其父容器的 100% 位置

而如果寫成
android:toYDelta="100%",即是指示了 起自身的 100% 位置。

參考:

http://www.linuxidc.com/Linux/2012-04/59153.htm

http://blog.csdn.net/ztp800201/article/details/7387668

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容