从屏幕底部弹出PopupWindow
来源:互联网 发布:中国消防网站域名 编辑:程序博客网 时间:2024/05/17 06:22
最近因为要用到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(){@Overridepublic 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);
private OnClickListener itemsOnClick = new OnClickListener(){@Overridepublic 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;} } };
- 从屏幕底部弹出PopupWindow
- 从屏幕底部弹出PopupWindow
- Android从屏幕底部弹出popupWindow
- PopupWindow从底部弹出
- 仿Iphone从屏幕底部弹出半透明的PopupWindow
- PopupWindow实现屏幕底部弹出
- 从底部弹出的PopupWindow
- popupwindow从屏幕右上角弹出
- Android Animation动画实战(二):从屏幕底部弹出PopupWindow
- Android 之从底部弹出PopupWindow
- 自定义PopupWindow轻松实现从底部弹出
- PopUpWindow不一定只能从底部弹出
- Android从底部弹出一个PopupWindow
- 实现从底部弹出的PopupWindow
- Android Animation实战之屏幕底部弹出PopupWindow
- Android Animation实战之屏幕底部弹出PopupWindow
- PopupWindow底部弹出
- PopupWindow底部弹出
- ubuntu下载mysql
- SSL/TLS/DTLS对比
- cas keytools 导入 jks
- Android createChooser方法源码简析
- 计算机视觉、机器学习相关领域论文和源代码
- 从屏幕底部弹出PopupWindow
- MyEclipse使用总结——MyEclipse10安装SVN插件
- LEETCODE: Insertion Sort List
- 学习C++——实现抽象数据类型——栈
- 【设计模式】初识
- .NET ORM框架
- Linux -- Nginx 负载均衡和反向代理
- Oracle spatial、openlayers、geoserver开发地理信息系统总结
- windows和linux下androidSDK是否通用?