这一篇集合动画知识和弹出窗体知识,综合起来以动画的形式弹出窗体。

动画的知识前几篇已经做过详细的介绍,可翻阅前面写的有关动画博文。先简单介绍一下弹出窗体效果的方法:

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

总共需要三个参数,三个参数的含义分别是:

/  **contentView:窗体属于一个“容器”因此填充一个布局,因此要专门为之建一个布局,它就是填充布局后的view,(类似于自定义对话框)。窗体显示的内容

         * width:布局的宽   -2表示wrap_content

         * height:布局的高

         */

因此要为第一个参数放置一个代表布局的view对象

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

最后显示窗体:

 //三个参数含义:父组件(点击button,button就是父组件);相对于窗体左上角对其;相对于窗体左上角实际宽高

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){
//显示窗体
//三个参数含义:父组件(点击button,button就是父组件);相对于窗体左上角对其;相对于窗体左上角实际宽高
 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);//C++的编程风格
//要想给窗体设置动画效果,必须为窗体设置一个背景,如果没有背景动画不会显示。
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;
} }

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

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

  1. Android 应用监听自身卸载,弹出用户反馈调查

    监听卸载情景和原理分析 1,情景分析 在上上篇博客中我写了一下NDK开发实践项目,使用开源的LAME库转码MP3,作为前面几篇基础博客的加深理解使用的,但是这样的项目用处不大,除了练练NDK功底.这篇 ...

  2. CSS3/jQuery自己定义弹出窗体

    简单演示一下,精简了演示效果和css样式文件,更利于在项目中的实际应用 引入style.css   index.js <!DOCTYPE HTML PUBLIC "-//W3C//DT ...

  3. PopupWindow 从底部弹出窗体

    第一步  : 初始化PopupWindow private void initPop() { if (view == null) { // 照片 view = View.inflate(Registe ...

  4. MVVM模式下弹出窗体

    原地址:http://www.cnblogs.com/yk250/p/5773425.html 在mvvm模式下弹出窗体,有使用接口模式传入参数new一个对象的,还有的是继承于一个window,然后在 ...

  5. gridView AspNetPager 翻页时 弹出窗体关闭报错

    gridView AspNetPager 翻页后,你右击刷新或F5会发现弹出一个刷新页面. 这是因为默认翻页都是用dopostback方式回发的.因为这时的页面已经不是原来的页面.所以会弹出提示. 这 ...

  6. Ext入门学习系列(二)弹出窗体

    第二章 弹出窗体 上节学习了Ext的环境搭建和最基本的一个操作——弹出对话框,作为一个引子,本节讲述如何弹出一个新窗体,从实例讲解Ext的基本运行原理. 一.Ext的窗体长什么样? 先来看看几个效果, ...

  7. C#利用API制作类似QQ一样的右下角弹出窗体

    C#利用API制作类似QQ一样的右下角弹出窗体 (2009-03-21 15:02:49) 转载▼ 标签: 杂谈 分类: .NET using System;using System.Collecti ...

  8. EBS OAF开发中实现參数式弹出窗体

    EBS OAF开发中实现參数式弹出窗体 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 概览 參数式弹出窗体和嵌入式弹出窗体不一样,它拥有独立 ...

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

    在子线程中使用 SaveFileDialog 无法弹出窗体,主要是我们需要用主线程去处理SaveFileDialog , 我们可以将子线程进行如下设置: public partial class Fo ...

随机推荐

  1. Python Django rest framework

    本节内容 Django rest framework 安装 Django rest framwwork 环境配置 简单举例说明 Django中使用 rest framework 1.1 安装 Djan ...

  2. SQL优化实用方法

    SQL优化:避免索引失效 1.不使用NULL 任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的.因为只有该字段中有null值,即使创建了索引其实也是没有用 ...

  3. scanf———while(scanf ("%lu",&num) = =1)什么意思

    scanf的返回值由后面的参数决定 scanf("%d%d", &a, &b); 如果a和b都被成功读入,那么scanf的返回值就是2 如果只有a被成功读入,返回值 ...

  4. php留言板的实现

    留言板功能的实现,主要就是通过编程语言对数据库进行操作,简单说也就是插入和查询的实现.不管是什么语言进行实现,道理都是一样的. 应学习需要,这里用php世界上最美的语言来进行实现. 主要步骤为: 连接 ...

  5. 【python教程01】 编辑器

    工欲善其事,必先利其器.学习python,首先应该安装好开发中使用的编辑器. 那么在这里说一下我们推荐的两款:sublime text  && pycharm   为什么推荐这两款编辑 ...

  6. [HCNA]VLAN配置Access接口

    实验目的 1.理解VLAN的应用场景 2.掌握VLAN的基本配置 3.掌握Access接口的配置方法 4.掌握Access接口加入相应VLAN的方法 实验仪器 eNSP 实验原理 如网络拓扑图所示 各 ...

  7. 利用create-react-app结合react-redux、react-router4构建单页应用

    1.创建项目: a.全局安装create-react-app: npm  install  create-react-app  -g b.执行create-react-app  my-projectN ...

  8. Mac下安装PEAR

    The following instructions install PEAR and PECL on Mac OS X under/usr/local/. PECL is bundled with ...

  9. ACM Least Common Multiple

    The least common multiple (LCM) of a set of positive integers is the smallest positive integer which ...

  10. PHP 5 Date/Time 函数

    PHP Date/Time 简介 Date/Time 函数允许您从 PHP 脚本运行的服务器上获取日期和时间.您可以使用 Date/Time 函数通过不同的方式来格式化日期和时间. 注释:这些函数依赖 ...