转 android 从底部弹出一个popuwindow,渐入渐出效果。我这里是用在购物车需要选择购买选项的操作。
最近要改客户端,需要实现一个从底部弹出的popuwindow,像我这种渣渣android技术,能整出popuwindow但是整不出动画,百度之,记录一下。
从下面这个地址转的 http://blog.csdn.net/yxhuang2008/article/details/42617805
最近因为要用到PopupWindow,所以,就在网上搜索了一下,发现挺多关于这样的文章,现在我把它们整理了一下。
1、Android PopupWindow 的使用技巧,http://www.cnblogs.com/sw926/p/3230659.html
2、Android PopupWindow 的使用和分析,http://www.cnblogs.com/mengdd/p/3569127.html
3、Android PopupWindow 实现从底部弹出或滑出选择菜单或窗口,http://104zz.iteye.com/blog/1685389
本文是整理上面三篇文章而成,绝大部分代码是使用第三篇的,如有不妥,请联系。
一、第一步就是创建布局文件
res/layout/finish_project_popupwindow.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
- <Button
- android:id="@+id/popupwindow_Button_saveProject"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:layout_marginTop="10dip"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/popupwindow_Button_saveProject" />
- <Button
- android:id="@+id/popupwindow_Button_abandonProject"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:layout_marginTop="10dip"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/popupwindow_Button_abandonProject" />
- <Button
- android:id="@+id/popupwindow_cancelButton"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:layout_marginTop="10dip"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/popupwindow_cancelButton" />
- </LinearLayout>
二、第二步,设置PopupWindow弹出和淡出的动画效果
1、在res目录下建立一个文件夹anim,专门用于存储PopupWindow弹出和淡出的动画效果
(1)PopupWindow 弹出时的动画效果
res/anim/enter_anim.xml
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false">
- <translate
- android:fromYDelta="100%p"
- android:toYDelta="0"
- android:duration="500" />
- <alpha
- android:fromAlpha="0"
- android:toAlpha="1.0"
- android:duration="300"/>
- </set>
(2)PopupWindow 淡出时的动画效果
res/anim/out_anim.xml
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false">
- <translate
- android:fromYDelta="0"
- android:toYDelta="100%p"
- android:duration="3000"/>
- <alpha
- android:fromAlpha="1.0"
- android:toAlpha="0"
- android:duration="2000"/>
- </set>
在<translate>标签中,fromYDelta, toYDelta 表示在y轴方法的移动,因为我是要实现从底部弹出PopupWindow的,所以,是y轴,如果想要实现从屏幕侧边的话,可以选择x轴fromXDelta, toXDelta。
duration 表示弹出或者淡出的动画时间。在<alpha>标签中表示PopupWindow透明度的变化,这样是为了比较好看。duration 同样表示时间。
(3)增加这样的Style
在res/valus/styles.xml 的<resources>标签内添加
- <!-- popupwindow 动画 -->
- <style name="Animation">
- <item name="android:windowEnterAnimation">@anim/enter_anim</item>
- <item name="android:windowExitAnimation">@anim/out_anim</item>
- </style>
其中,
- <item name="android:windowEnterAnimation">@anim/enter_anim</item>
表示窗口弹出时的动画文件,@anim/enter_anim 中enter_anim一定要和我们前面定义弹出动画的文件名一致,淡出的动画文件类似。
三、创建自定义类,继承PopupWindow
src/FinishProjectPopupWindow.java
- import android.app.Activity;
- import android.content.Context;
- import android.graphics.drawable.ColorDrawable;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.ViewGroup.LayoutParams;
- import android.widget.Button;
- import android.widget.PopupWindow;
- public class FinishProjectPopupWindows extends PopupWindow{
- private static final String TAG = "FinishProjectPopupWindows";
- private View mView;
- public Button btnSaveProject, btnAbandonProject, btnCancelProject;
- public FinishProjectPopupWindows(Activity context,
- OnClickListener itemsOnClick) {
- super(context);
- Log.i(TAG, "FinishProjectPopupWindow 方法已被调用");
- LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- mView = inflater.inflate(R.layout.finish_project_popuwindow, null);
- btnSaveProject = (Button) mView.findViewById(R.id.popupwindow_Button_saveProject);
- btnAbandonProject = (Button) mView.findViewById(R.id.popupwindow_Button_abandonProject);
- btnCancelProject = (Button) mView.findViewById(R.id.popupwindow_cancelButton);
- // 设置按钮监听
- btnCancelProject.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v) {
- Log.i(TAG, "取消项目");
- dismiss();
- }
- });
- btnSaveProject.setOnClickListener(itemsOnClick);
- btnAbandonProject.setOnClickListener(itemsOnClick);
- //设置PopupWindow的View
- this.setContentView(mView);
- //设置PopupWindow弹出窗体的宽
- this.setWidth(LayoutParams.MATCH_PARENT);
- //设置PopupWindow弹出窗体的高
- this.setHeight(LayoutParams.WRAP_CONTENT);
- //设置PopupWindow弹出窗体可点击
- this.setFocusable(true);
- //设置SelectPicPopupWindow弹出窗体动画效果
- this.setAnimationStyle(R.style.Animation);
- //实例化一个ColorDrawable颜色为半透明
- ColorDrawable dw = new ColorDrawable(0xb0000000);
- //设置SelectPicPopupWindow弹出窗体的背景
- this.setBackgroundDrawable(dw);
- }
- }
四、在Activity中设置弹出PopupWindow
- private FinishProjectPopupWindows mFinishProjectPopupWindow
- mFinishProjectPopupWindow = new FinishProjectPopupWindows(MapFragmentActivity.this, itemsOnClick);
- // 显示PopupWindow
- mFinishProjectPopupWindow.showAtLocation(MapFragmentActivity.this.findViewById(R.id.main),
- Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);
五、实现PopupWindow中按钮的监听
- private OnClickListener itemsOnClick = new OnClickListener(){
- @Override
- public void onClick(View v) {
- mFinishProjectPopupWindow.dismiss();
- switch(v.getId()){
- case R.id.popupwindow_Button_saveProject:
- Log.i(TAG, "保存线路");
- break;
- case R.id.popupwindow_Button_abandonProject:
- break;
- case R.id.popupwindow_cancelButton:
- mFinishProjectPopupWindow.dismiss();
- Log.i(TAG, "取消");
- break;
- }
- }
- };
运行的效果
转 android 从底部弹出一个popuwindow,渐入渐出效果。我这里是用在购物车需要选择购买选项的操作。的更多相关文章
- 给出一个数组A,找出一对 (i, j)使得A[i] <= A[j] (i < j)并且j-i最大
题目:给出一个数组A,找出一对 (i, j)使得A[i] <= A[j] (i <= j)并且j-i最大 ,若有多个这样的位置对,返回i最小的那一对. 最直接的想法就是对于每一个 i 从数 ...
- MFC上下浮动与渐入渐出消息提示框实现
类似QQ与360软件,消息提示有两种.上下浮动.渐入渐出. 1.上下浮动提示框实现 机制,定时器响应上下浮动消息. 主要API:MoveWindow. 源码如下UpDownTipDlg.h.UpDow ...
- MFC渐入渐出框实现方式二
类似360消息弹出框,实现方式一见http://blog.csdn.net/segen_jaa/article/details/7848598. 本文采用另外的API实现渐入渐出效果. 主要API:S ...
- 解决Jquery mobile点击较长文本body的时候Header和footer会渐入渐出的问题
在做一个Phonegap+Jqm工程的时候,出现了如题的问题,相信很多人都遇到过Jquerymobile点击body时候header和footer会闪烁的显示和隐藏问题,fixed却并不能真 ...
- [Unity3D]Unity3D游戏开发之Logo渐入渐出效果的实现
---------------------------------------------------------------------------------------------------- ...
- NSIS:实现程序窗口逐渐透明的渐入渐出效果
原文NSIS:实现程序窗口逐渐透明的渐入渐出效果 需要修改版的插件(支持timer功能): MUI:InstallOptions.dll MUI2:nsDialogs.dll 以及system插件,( ...
- js原生实现div渐入渐出
jq对渐入渐出进行封装,简单的使用连个方法就可以实现.fadeIn(),fadeOut();如果我们界面没有使用jq那么原生怎么实现呢? 我们讲解一下,这个原理.当我们要实现渐入的时候,首先是让隐藏的 ...
- 用js写出一个漂亮的单选框选中效果
一般的input框比较简单,我们可以用JavaScript配合css背景图片定位让我们模拟写出一个点击选中效果 首先需要有个图片素材,当页面加载的时候是背景图片定位到左图,当我们点击图片的时候,背景图 ...
- android Dialog 底部弹出
. if (dialShareDialog == null) { dialShareDialog = new Dialog(context, R.style.dialog); dialShareDia ...
随机推荐
- jQuery实践树(2)
上一个实践主要对jquery的ready事件进行.本实践要来使用jQuery改变页面的背景图片.可以先试试效果:http://hovertree.com/texiao/jquerytree/2/ 当你 ...
- 【UI插件】简单的日历插件(下)—— 学习MVC思想
前言 我们上次写了一个简单的日历插件,但是只是一个半成品,而且做完后发现一些问题,于是我们今天尝试来解决这些问题 PS:距离上次貌似很久了 上次,我们大概遇到哪些问题呢: ① 既然想做一套UI库,那么 ...
- $(function) ready onload 等区别
新手接触javascript.jquery的时候不可避免的要接触题目所标识的相关内容,反复看过几次一到用的时候总是不踏实,写文以记之. 符号“$”是jquery对象(个人这样理解,拥有函数的用法).接 ...
- sass初级语法
github地址:https://github.com/lily1010/sass/tree/master/course01 用到的sass语法是: sass --watch test.scss:te ...
- 一个有趣的CM
系统 : Windows xp 程序 : Crackme#3 - Self Destructed 程序下载地址 :http://pan.baidu.com/s/1kVxwlaZ 要求 : 注册机编写 ...
- Android开发的小技巧,在Android Studio中使用Designtime Layout Attributes
在编写xml文件时,为了预览效果,经常会使用默认填上一些内容,比如TextView时,随便写上一个text <TextView ... android:text="Name:" ...
- JavaWeb工程中web.xml基本配置
一.理论准备 先说下我记得xml规则,必须有且只有一个根节点,大小写敏感,标签不嵌套,必须配对. web.xml是不是必须的呢?不是的,只要你不用到里面的配置信息就好了,不过在大型web工程下使用该文 ...
- Ubuntu如何选择更新源
刚装上Ubuntu, 决定先更新一下源. 虽然网上搜索提供了很多更新源,结果替换上实际使用的时候,却发现总是有404无法连接的情况. 后来查查资料,发现Ubuntu自己就提供了很多的源管理. 具体更新 ...
- MS SQL统计信息浅析下篇
MS SQL统计信息浅析上篇对SQL SERVER 数据库统计信息做了一个整体的介绍,随着我对数据库统计信息的不断认识.理解,于是有了MS SQL统计信息浅析下篇. 下面是我对SQL Serve ...
- Oozie-4.0.0-cdh5.3.6搭建
到官网下载安装包 解压并cd到安装目录 解压目录下的 oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz 会自动解压成目录hadooplibs 创建文件夹 libext 将 ...