Android初级教程以动画的形式弹出窗体
这一篇集合动画知识和弹出窗体知识,综合起来以动画的形式弹出窗体。
动画的知识前几篇已经做过详细的介绍,可翻阅前面写的有关动画博文。先简单介绍一下弹出窗体效果的方法:
首先,需要窗体的实例: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初级教程以动画的形式弹出窗体的更多相关文章
- Android 应用监听自身卸载,弹出用户反馈调查
监听卸载情景和原理分析 1,情景分析 在上上篇博客中我写了一下NDK开发实践项目,使用开源的LAME库转码MP3,作为前面几篇基础博客的加深理解使用的,但是这样的项目用处不大,除了练练NDK功底.这篇 ...
- CSS3/jQuery自己定义弹出窗体
简单演示一下,精简了演示效果和css样式文件,更利于在项目中的实际应用 引入style.css index.js <!DOCTYPE HTML PUBLIC "-//W3C//DT ...
- PopupWindow 从底部弹出窗体
第一步 : 初始化PopupWindow private void initPop() { if (view == null) { // 照片 view = View.inflate(Registe ...
- MVVM模式下弹出窗体
原地址:http://www.cnblogs.com/yk250/p/5773425.html 在mvvm模式下弹出窗体,有使用接口模式传入参数new一个对象的,还有的是继承于一个window,然后在 ...
- gridView AspNetPager 翻页时 弹出窗体关闭报错
gridView AspNetPager 翻页后,你右击刷新或F5会发现弹出一个刷新页面. 这是因为默认翻页都是用dopostback方式回发的.因为这时的页面已经不是原来的页面.所以会弹出提示. 这 ...
- Ext入门学习系列(二)弹出窗体
第二章 弹出窗体 上节学习了Ext的环境搭建和最基本的一个操作——弹出对话框,作为一个引子,本节讲述如何弹出一个新窗体,从实例讲解Ext的基本运行原理. 一.Ext的窗体长什么样? 先来看看几个效果, ...
- C#利用API制作类似QQ一样的右下角弹出窗体
C#利用API制作类似QQ一样的右下角弹出窗体 (2009-03-21 15:02:49) 转载▼ 标签: 杂谈 分类: .NET using System;using System.Collecti ...
- EBS OAF开发中实现參数式弹出窗体
EBS OAF开发中实现參数式弹出窗体 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 概览 參数式弹出窗体和嵌入式弹出窗体不一样,它拥有独立 ...
- 线程中使用SaveFileDialog不能弹出窗体
在子线程中使用 SaveFileDialog 无法弹出窗体,主要是我们需要用主线程去处理SaveFileDialog , 我们可以将子线程进行如下设置: public partial class Fo ...
随机推荐
- 几种常用hash算法及原理
计算理论中,没有Hash函数的说法,只有单向函数的说法.所谓的单向函数,是一个复杂的定义,大家可以去看计算理论或者密码学方面的数据.用“人 类”的语言描述单向函数就是:如果某个函数在给定输入的时候,很 ...
- Unity3d 简单的小球沿贝塞尔曲线运动(适合场景漫游使用)
简单的小球沿贝塞尔曲线运动,适合场景漫游使用 贝塞尔曲线:(贝塞尔曲线的基本想法部分摘自http://blog.csdn.net/u010019717/article/details/4768 ...
- JAVA虚拟机:对象的创建过程
简要说明的话,Java对象的创建过程分为下面几步: 1.执行相关检查: 2.为对象分配内存,将分配到的内存空间都初始化为零值: 3.进行构造代码块和构造函数的初始化 下面详细介绍这几个步骤: 1.执行 ...
- Python爬取腾讯新闻首页所有新闻及评论
前言 这篇博客写的是实现的一个爬取腾讯新闻首页所有的新闻及其所有评论的爬虫.选用Python的Scrapy框架.这篇文章主要讨论使用Chrome浏览器的开发者工具获取新闻及评论的来源地址. Chrom ...
- ubuntu远程桌面连接命令rdesktop连接windows远程桌面详解
sudo apt-get install rdesktoprdesktop 124.42.120.174:1433 呵呵,连接成功了. -f 全屏-a 16位色默认端口是3389(linux 22 s ...
- android基础-界面开发注意事项
做安卓开发时一定要注意,主线程不能更改UI界面,如果出现程序运行时崩溃的情况,如果没有明显的语法错误,请检查自己的进程是否出现冲突,崩溃.如果有与后台的连接,即请求向服务器发送请求的时尤其需要注意,或 ...
- oracle拆分一个连续的字符串
create or replace procedure pc( sss out varchar2)isstr varchar2(20):='ph,p,cod,do,cu';en integer:=i ...
- 关于ubuntu14.04LTS 64位 播放优酷视频
起因:chrome无法播放优酷视频,然后换firefox发现居然没有装flash 插件. 解释:关于chrome在网上看到了不少说法,说chrome新版本的不支持adobe flash之类的,但是这些 ...
- MongoDB 监控
在你已经安装部署并允许MongoDB服务后,你必须要了解MongoDB的运行情况,并查看MongoDB的性能.这样在大流量得情况下可以很好的应对并保证MongoDB正常运作. MongoDB中提供了m ...
- Java经典设计模式之五大创建型模式(附实例和详解)
一.概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. (2)结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥 ...