最近要改客户端,需要实现一个从底部弹出的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

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:orientation="vertical" >
  6. <Button
  7. android:id="@+id/popupwindow_Button_saveProject"
  8. android:layout_marginLeft="20dip"
  9. android:layout_marginRight="20dip"
  10. android:layout_marginTop="10dip"
  11. android:layout_width="match_parent"
  12. android:layout_height="wrap_content"
  13. android:text="@string/popupwindow_Button_saveProject" />
  14. <Button
  15. android:id="@+id/popupwindow_Button_abandonProject"
  16. android:layout_marginLeft="20dip"
  17. android:layout_marginRight="20dip"
  18. android:layout_marginTop="10dip"
  19. android:layout_width="match_parent"
  20. android:layout_height="wrap_content"
  21. android:text="@string/popupwindow_Button_abandonProject" />
  22. <Button
  23. android:id="@+id/popupwindow_cancelButton"
  24. android:layout_marginLeft="20dip"
  25. android:layout_marginRight="20dip"
  26. android:layout_marginTop="10dip"
  27. android:layout_width="match_parent"
  28. android:layout_height="wrap_content"
  29. android:text="@string/popupwindow_cancelButton" />
  30. </LinearLayout>

二、第二步,设置PopupWindow弹出和淡出的动画效果

1、在res目录下建立一个文件夹anim,专门用于存储PopupWindow弹出和淡出的动画效果

(1)PopupWindow  弹出时的动画效果

res/anim/enter_anim.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shareInterpolator="false">
  4. <translate
  5. android:fromYDelta="100%p"
  6. android:toYDelta="0"
  7. android:duration="500" />
  8. <alpha
  9. android:fromAlpha="0"
  10. android:toAlpha="1.0"
  11. android:duration="300"/>
  12. </set>

(2)PopupWindow 淡出时的动画效果

res/anim/out_anim.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shareInterpolator="false">
  4. <translate
  5. android:fromYDelta="0"
  6. android:toYDelta="100%p"
  7. android:duration="3000"/>
  8. <alpha
  9. android:fromAlpha="1.0"
  10. android:toAlpha="0"
  11. android:duration="2000"/>
  12. </set>

在<translate>标签中,fromYDelta, toYDelta 表示在y轴方法的移动,因为我是要实现从底部弹出PopupWindow的,所以,是y轴,如果想要实现从屏幕侧边的话,可以选择x轴fromXDelta, toXDelta。

duration 表示弹出或者淡出的动画时间。在<alpha>标签中表示PopupWindow透明度的变化,这样是为了比较好看。duration 同样表示时间。

(3)增加这样的Style

在res/valus/styles.xml  的<resources>标签内添加

  1. <!-- popupwindow 动画 -->
  2. <style name="Animation">
  3. <item name="android:windowEnterAnimation">@anim/enter_anim</item>
  4. <item name="android:windowExitAnimation">@anim/out_anim</item>
  5. </style>

其中,

  1. <item name="android:windowEnterAnimation">@anim/enter_anim</item>

表示窗口弹出时的动画文件,@anim/enter_anim  中enter_anim一定要和我们前面定义弹出动画的文件名一致,淡出的动画文件类似。

三、创建自定义类,继承PopupWindow

src/FinishProjectPopupWindow.java

  1. import android.app.Activity;
  2. import android.content.Context;
  3. import android.graphics.drawable.ColorDrawable;
  4. import android.util.Log;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.view.ViewGroup.LayoutParams;
  9. import android.widget.Button;
  10. import android.widget.PopupWindow;
  11. public class FinishProjectPopupWindows extends PopupWindow{
  12. private static final String TAG = "FinishProjectPopupWindows";
  13. private View mView;
  14. public Button btnSaveProject, btnAbandonProject, btnCancelProject;
  15. public FinishProjectPopupWindows(Activity context,
  16. OnClickListener itemsOnClick) {
  17. super(context);
  18. Log.i(TAG, "FinishProjectPopupWindow 方法已被调用");
  19. LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  20. mView = inflater.inflate(R.layout.finish_project_popuwindow, null);
  21. btnSaveProject = (Button) mView.findViewById(R.id.popupwindow_Button_saveProject);
  22. btnAbandonProject = (Button) mView.findViewById(R.id.popupwindow_Button_abandonProject);
  23. btnCancelProject = (Button) mView.findViewById(R.id.popupwindow_cancelButton);
  24. // 设置按钮监听
  25. btnCancelProject.setOnClickListener(new OnClickListener(){
  26. @Override
  27. public void onClick(View v) {
  28. Log.i(TAG, "取消项目");
  29. dismiss();
  30. }
  31. });
  32. btnSaveProject.setOnClickListener(itemsOnClick);
  33. btnAbandonProject.setOnClickListener(itemsOnClick);
  34. //设置PopupWindow的View
  35. this.setContentView(mView);
  36. //设置PopupWindow弹出窗体的宽
  37. this.setWidth(LayoutParams.MATCH_PARENT);
  38. //设置PopupWindow弹出窗体的高
  39. this.setHeight(LayoutParams.WRAP_CONTENT);
  40. //设置PopupWindow弹出窗体可点击
  41. this.setFocusable(true);
  42. //设置SelectPicPopupWindow弹出窗体动画效果
  43. this.setAnimationStyle(R.style.Animation);
  44. //实例化一个ColorDrawable颜色为半透明
  45. ColorDrawable dw = new ColorDrawable(0xb0000000);
  46. //设置SelectPicPopupWindow弹出窗体的背景
  47. this.setBackgroundDrawable(dw);
  48. }
  49. }

四、在Activity中设置弹出PopupWindow

  1. private FinishProjectPopupWindows mFinishProjectPopupWindow
  1. mFinishProjectPopupWindow = new FinishProjectPopupWindows(MapFragmentActivity.this, itemsOnClick);
  2. // 显示PopupWindow
  1. mFinishProjectPopupWindow.showAtLocation(MapFragmentActivity.this.findViewById(R.id.main),
  2. Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);

五、实现PopupWindow中按钮的监听

  1. private OnClickListener  itemsOnClick = new OnClickListener(){
  2. @Override
  3. public void onClick(View v) {
  4. mFinishProjectPopupWindow.dismiss();
  5. switch(v.getId()){
  6. case R.id.popupwindow_Button_saveProject:
  7. Log.i(TAG, "保存线路");
  8. break;
  9. case R.id.popupwindow_Button_abandonProject:
  10. break;
  11. case R.id.popupwindow_cancelButton:
  12. mFinishProjectPopupWindow.dismiss();
  13. Log.i(TAG, "取消");
  14. break;
  15. }
  16. }
  17. };

运行的效果

转 android 从底部弹出一个popuwindow,渐入渐出效果。我这里是用在购物车需要选择购买选项的操作。的更多相关文章

  1. 给出一个数组A,找出一对 (i, j)使得A[i] <= A[j] (i < j)并且j-i最大

    题目:给出一个数组A,找出一对 (i, j)使得A[i] <= A[j] (i <= j)并且j-i最大 ,若有多个这样的位置对,返回i最小的那一对. 最直接的想法就是对于每一个 i 从数 ...

  2. MFC上下浮动与渐入渐出消息提示框实现

    类似QQ与360软件,消息提示有两种.上下浮动.渐入渐出. 1.上下浮动提示框实现 机制,定时器响应上下浮动消息. 主要API:MoveWindow. 源码如下UpDownTipDlg.h.UpDow ...

  3. MFC渐入渐出框实现方式二

    类似360消息弹出框,实现方式一见http://blog.csdn.net/segen_jaa/article/details/7848598. 本文采用另外的API实现渐入渐出效果. 主要API:S ...

  4. 解决Jquery mobile点击较长文本body的时候Header和footer会渐入渐出的问题

         在做一个Phonegap+Jqm工程的时候,出现了如题的问题,相信很多人都遇到过Jquerymobile点击body时候header和footer会闪烁的显示和隐藏问题,fixed却并不能真 ...

  5. [Unity3D]Unity3D游戏开发之Logo渐入渐出效果的实现

    ---------------------------------------------------------------------------------------------------- ...

  6. NSIS:实现程序窗口逐渐透明的渐入渐出效果

    原文NSIS:实现程序窗口逐渐透明的渐入渐出效果 需要修改版的插件(支持timer功能): MUI:InstallOptions.dll MUI2:nsDialogs.dll 以及system插件,( ...

  7. js原生实现div渐入渐出

    jq对渐入渐出进行封装,简单的使用连个方法就可以实现.fadeIn(),fadeOut();如果我们界面没有使用jq那么原生怎么实现呢? 我们讲解一下,这个原理.当我们要实现渐入的时候,首先是让隐藏的 ...

  8. 用js写出一个漂亮的单选框选中效果

    一般的input框比较简单,我们可以用JavaScript配合css背景图片定位让我们模拟写出一个点击选中效果 首先需要有个图片素材,当页面加载的时候是背景图片定位到左图,当我们点击图片的时候,背景图 ...

  9. android Dialog 底部弹出

    . if (dialShareDialog == null) { dialShareDialog = new Dialog(context, R.style.dialog); dialShareDia ...

随机推荐

  1. Sap SE16n 修改表数据

    SAP中直接修改表.视图的Tcode有SE16N和SM30. 其中使用SE16N修改表需要先输入命令&SAP_EDIT, 回车左下角显示激活SAP编辑功能后,就可以对相应的表进行新增.删除.修 ...

  2. IBatis.Net项目数据库SqlServer迁移至Oracle经验

    最近完成了一个(IBatis.Net+MVC)项目的数据库+代码迁移工作,可把我折腾得~~~ IBatis.Net是一个ORM框架,具体介绍可以问度娘.我之前没用ORM框架使用经验,所以这一路我不是走 ...

  3. UIImageView 自带动画+N张图片实现很炫的动画

    gitHub上又看到个很炫的动画:https://github.com/MartinRGB/GiftCard-iOS   看了看他的代码,发现核心动画(就是把按钮包装成一个礼物盒)其实很简单,就是把一 ...

  4. Java Web解决解析乱码和响应乱码

    package cn.edu.aynu.rjxy.servlet; import java.io.IOException; import java.io.PrintWriter; import jav ...

  5. AlertDialog的六种创建方式

    AlertDialog的六种创建方式 创建AlertDialog的步骤: 1.创建AlertDialog.Builder对象 2.调用Builder对象的setTitle方法设置标题,setIcon方 ...

  6. 使用私有Pod Spec的类库--提高公司开发效率

    前言 找了这么长时间,再次开始去尝试Cocoapods了.前面已经写过一篇关于如何把自己的Github上的代码库添加Cocoapods支持.现在就让我们看一下如果搭建私有的Spec吧. 之所以构建私有 ...

  7. Linux忘记root密码怎么办?

    开篇前言:Linux系统的root账号是非常重要的一个账号,也是权限最大的一个账号,但是有时候忘了root密码怎么办?总不能重装系统吧,这个是下下策,其实Linux系统中,如果忘记了root账号密码, ...

  8. RESTORE detected an error on page (0:0) in database

    在测试服务器还原生产服务器的一个数据库时遇到了下面错误: System.Data.SqlClient.SqlError: RESTORE detected an error on page (0:0) ...

  9. 机器学习实战笔记(Python实现)-00-readme

    近期学习机器学习,找到一本不错的教材<机器学习实战>.特此做这份学习笔记,以供日后翻阅. 机器学习算法分为有监督学习和无监督学习.这本书前两部分介绍的是有监督学习,第三部分介绍的是无监督学 ...

  10. 分布式搜索引擎ElasticSearch+Kibana (Marvel插件安装详解)

    在安装插件的过程中,尤其是安装Marvel插件遇到了很多问题,要下载license.Marvel-agent,又要下载安装Kibana 版本需求 Java 7 or later Elasticsear ...