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

}

这样就实现了窗体动画形式展示了。给出一张正在播放动画的截图如下:

时间: 2024-10-11 11:37:50

Android初级教程以动画的形式弹出窗体的相关文章

Android 如何监听返回键,弹出一个退出对话框

Android 如何监听返回键,弹出一个退出对话框 分类: 初级android2012-10-21 00:46 48472人阅读 评论(9) 收藏 举报 androiddialogbuttonclass Android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用程序不小心点击退出键而直接退出.自己记录下这个简单的demo,备用. 注:如下代码当时是从网上copy过来的,现在忘了它出自哪个原作者了,在此说声抱歉. 源码如下: [html] view plaincopy <EM

如何实现android蓝牙开发 自动配对连接,并不弹出提示框

如何实现android蓝牙开发 自动配对连接,并不弹出提示框 之前做一个android版的蓝牙,遇到最大的难题就是自动配对. 上网查资料说是用反射createBond()和setPin(),但测试时进行配对还是会出现提示,但配对是成功了 我就开始查找怎么关闭这个蓝牙配对提示框,后面还是伟大的android源码帮助了我. 在源码 BluetoothDevice 类中还有两个隐藏方法 cancelBondProcess()和cancelPairingUserInput() 这两个方法一个是取消配对进

Android点击返回键back时弹出对话框Dialog

public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { ExitDialog(MainActivity.this).show(); return true; } return super.onKeyDown(keyCode, event); } private Dialog ExitDialog

点击ListView一个Item弹出窗体,窗体展示时添加动画效果切入

private class MyAppInfoItemClickListener implements OnItemClickListener{ @Override public void onItemClick(AdapterView<?> parent, View view, int position,long id) { // 在弹出之前先销毁已经弹出的窗体 destoryPopupWindow(); //保留当前的Item的位置坐标 currentIndex = position; /

网页右下角弹出窗体

<!--开始--><style type="text/css"> #msg_win{position:absolute;right:0px;display:none;overflow:hidden;z-index:99;border:1px solid #c00;background:#F9EFFC;width:210px;font-size:12px;margin:0px;} #msg_win .icos{position:absolute;top:2px;*

弹出窗体。

1 package com.lixu.tanchuchuangti; 2 3 import android.app.Activity; 4 import android.graphics.Color; 5 import android.os.Bundle; 6 import android.view.Gravity; 7 import android.view.LayoutInflater; 8 import android.view.View; 9 import android.view.Vi

PopupWindow 从底部弹出窗体

第一步  : 初始化PopupWindow private void initPop() { if (view == null) { // 照片 view = View.inflate(RegisterActivity.this, R.layout.pop_phone, null); / /加载对象 } if (mPopupWindow == null) { mPopupWindow = new PopupWindow(view, LayoutParams.MATCH_PARENT, Layou

线程中使用SaveFileDialog不能弹出窗体

在子线程中使用 SaveFileDialog 无法弹出窗体,主要是我们需要用主线程去处理SaveFileDialog , 我们可以将子线程进行如下设置: public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        } private void button1_Click(object sender, EventArgs e)      

[King.yue]Ext.JS 弹出窗体取值赋值

//从Grid取值var name = Ext.getCmp(gridGridID).getView().getSelectionModel().getSelection()[0].data.Name; var code = Ext.getCmp(gridGridID).getView().getSelectionModel().getSelection()[0].data.Code; //赋值ID Ext.getCmp('@V.ID_TXT_NAME').setValue(name);//不用