android開發(31) 動畫演示 - 從頁面底部向上彈出dialog,消失時逐漸向下


我想實現一個效果,從底部向上逐漸彈出。如下圖所示:

1.點擊 顯示 按鈕時,一個dialog對話框從底部慢慢向上彈出。

2.關閉dialog時, dialog緩慢的移動向底部消失。很平滑的效果。

 

   

 

實現方式:

在activity中寫代碼如下

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(); 
		}
		
	}; 
}

 准備一個 style資源文件,創建 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>

至此完成。

 

代碼解釋:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM