Android初级教程以动画的形式弹出窗体
来源:互联网 发布:mac excel 公式不计算 编辑:程序博客网 时间:2024/05/21 09:21
这一篇集合动画知识和弹出窗体知识,综合起来以动画的形式弹出窗体。
动画的知识前几篇已经做过详细的介绍,可翻阅前面写的有关动画博文。先简单介绍一下弹出窗体效果的方法:
首先,需要窗体的实例: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; } }
这样就实现了窗体动画形式展示了。给出一张正在播放动画的截图如下:
1 0
- Android初级教程以动画的形式弹出窗体
- 以动画的形式启动窗体
- android中的activity以弹出窗的形式出现
- Android 使activity以模式对话框的形式弹出
- 以dialog的形式弹出定位地图
- android 倒计时的控件,以动画的形式平滑的完成数字的过度
- android 修改照片的命名方式导致连拍照片不能以动画形式播放
- 以 MFC 对话框的形式承载 Windows 窗体用户控件
- 使Activity以对话框的形式弹出来
- 使用popupwindow将布局文件以对话框的形式弹出
- Android属性动画应用——菜单以散开的方式弹出
- ListView中的item以动画的形式展开
- Animating Layout Changes(以动画的形式改变布局)
- C#将一个窗体作为另一个窗体的对话框形式弹出
- WPF制作子窗体的弹出动画效果
- WPF 制作子窗体的弹出动画效果
- WinForm窗体在弹出和关闭时候的动画
- 弹出无边框页面,(将页面以div的形式弹出)
- HDU 5701
- 华为研发工程师编程题----明明的随机数(快排)
- [2016/7/9][USACO1.5][暴力]Prime Palindromes
- Deep Learning Resources
- HTML、CSS中相似的元素、声明以及概念间的差别
- Android初级教程以动画的形式弹出窗体
- HTML转PDF总结
- linux 下 adb 安装apk
- jdk1.6下载
- How do I hide a menu item in the actionbar?
- oracle 存储过程小结
- LeetCode - 70. Climbing Stairs
- SwipeRefreshLayout+RecyclerView实现下拉刷新上拉自动加载
- 【make工程管理器】linux下Make工程管理器简述_学习笔记_004