Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android初級教程以動畫的形式彈出窗體

Android初級教程以動畫的形式彈出窗體

編輯:關於Android編程

這一篇集合動畫知識和彈出窗體知識,綜合起來以動畫的形式彈出窗體。

動畫的知識前幾篇已經做過詳細的介紹,可翻閱前面寫的有關動畫博文。先簡單介紹一下彈出窗體效果的方法:

首先,需要窗體的實例:PopupWindow window = new PopupWindow(contentView, width, height);

總共需要三個參數,三個參數的含義分別是:

/ **contentView:窗體屬於一個“容器”因此填充一個布局,因此要專門為之建一個布局,它就是填充布局後的view,(類似於自定義對話框)。窗體顯示的內容
* width:布局的寬 -2表示wrap_content
* height:布局的高
*/

因此要為第一個參數放置一個代表布局的view對象

contentView = View.inflate(getApplicationContext(), R.layout.popup, null);

最後顯示窗體:

window.showAtLocation(v, Gravity.LEFT | Gravity.TOP, 50, 50);

好了,窗體基本的api介紹完了,來看一下展示窗體的代碼:

 

package com.itydl.showwindow;

import android.os.Bundle;
import android.app.Activity;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.widget.PopupWindow;

public class MainActivity extends Activity {

    private View contentView;//窗體顯示內容,代表要放置的一個布局
	private PopupWindow window;//獲取窗體對象

	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        initPopup();//初始化組件
    }

	/**
	 * 初始化彈出窗體
	 */
    private void initPopup() {
    	//獲取布局view
    	contentView = View.inflate(getApplicationContext(), R.layout.popup, null);
    	
    	/**contentView:窗體屬於一個“容器”因此填充一個布局,因此要專門為之建一個布局,它就是填充布局後的view,(類似於自定義對話框)。窗體顯示的內容
		 * width:布局的寬   -2表示wrap_content
		 * height:布局的高
		 */
		window = new PopupWindow(contentView, -2, -2);//獲取窗體對象
	}


	/**
     * 點擊按鈕彈出窗體
     * @param v
     */
    public void popupWindow(View v){
    	//顯示窗體
    	window.showAtLocation(v, Gravity.LEFT | Gravity.TOP, 50, 50);
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}
運行程序如下所示:

 

\

按下返回鍵,你會發現程序崩潰了。這是因為彈出窗體返回的時候必須釋放掉窗體的所有資源,因此放到與activity綁定起來,放到ondestry()中就行了:

 

@Override
    protected void onDestroy() {
    	if(window!=null && window.isShowing()){
    		//跟著返回互動的關閉一起關閉
    		window.dismiss();
    		window=null;
    	}
    	super.onDestroy();
    }

以上把彈窗窗體基本方法介紹的差不多沒接下來就更改一些參數,且把動畫一起加進去,實現出題以動畫的效果彈出:

 

直接上完整代碼:

 

package com.itydl.showwindow;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.ScaleAnimation;
import android.widget.PopupWindow;

public class MainActivity extends Activity {

    private View contentView;//窗體顯示內容,代表要放置的一個布局
	private PopupWindow window;//獲取窗體對象
	private ScaleAnimation sa;//添加動畫

	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        initPopup();//初始化組件
    }

	/**
	 * 初始化彈出窗體
	 */
    private void initPopup() {
    	//獲取布局view
    	contentView = View.inflate(getApplicationContext(), R.layout.popup, null);
    	
    	/**contentView:窗體屬於一個“容器”因此填充一個布局,因此要專門為之建一個布局,它就是填充布局後的view,(類似於自定義對話框)。窗體顯示的內容
		 * width:布局的寬   -2表示wrap_content
		 * height:布局的高
		 */
		window = new PopupWindow(contentView, -2, -2);//獲取窗體對象
		
		////添加動畫
		sa = new ScaleAnimation(1, 1, 0, 1, Animation.RELATIVE_TO_SELF,0.5f ,Animation.RELATIVE_TO_SELF,0f);
		sa.setDuration(3000);//設置播放時長3s
	}


	/**
     * 點擊按鈕彈出窗體
     * @param v
     */
    public void popupWindow(View v){
    	if(window!=null && window.isShowing()){//判斷語句,實現點擊按鈕出現窗體,再點擊消失
    		window.dismiss();
    		
    	}else{
    		
    		int[] location = new int[2];//location[0]代表x軸;location[1]代表y軸
    		//獲取當前view組件的坐標(這裡v是button);把坐標封裝到了參數數組裡面
			v.getLocationInWindow(location);
			//要想給窗體設置動畫效果,必須為窗體設置一個背景,如果沒有背景動畫不會顯示。
			window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//設置一個透明的背景
			contentView.setAnimation(sa);//動畫效果給與哪個組件上
			/**窗體的
			 * 1、相對父組件
			 * 2、對齊方式
			 * 3、x坐標
			 * 4、y坐標
			 */
    		//顯示窗體      設置窗體顯示位置在按鈕的右下角。獲取當前view組件的坐標,加上其寬高作為新的坐標
    		window.showAtLocation(v, Gravity.LEFT | Gravity.TOP, location[0]+v.getWidth(), location[1]+v.getHeight());
    	}
    }
    
    @Override
    protected void onDestroy() {
    	if(window!=null && window.isShowing()){
    		//跟著返回互動的關閉一起關閉
    		window.dismiss();
    		window=null;
    	}
    	super.onDestroy();
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}

這樣就實現了窗體動畫形式展示了。給出一張正在播放動畫的截圖如下:

 

\

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved