自定义PopupWindow弹出框(带有动画)

使用PopupWindow来实现弹出框,并且带有动画效果

首先自定义PopupWindow

 1 public class LostPopupWindow extends PopupWindow {
 2     public Lost lost;
 3     public void onLost(Lost lost){
 4         this.lost = lost;
 5     }
 6     private View conentView;
 7
 8     public View getConentView() {
 9         return conentView;
10     }
11
12     public LostPopupWindow(final Activity context) {
13         LayoutInflater inflater = (LayoutInflater) context
14                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
15         conentView = inflater.inflate(R.layout.lost_pop_menu, null);
16         int h = context.getWindowManager().getDefaultDisplay().getHeight();
17         int w = context.getWindowManager().getDefaultDisplay().getWidth();
18         // 设置SelectPicPopupWindow的View
19         this.setContentView(conentView);
20         // 设置SelectPicPopupWindow弹出窗体的宽
21         this.setWidth(w / 2 + 50);
22         // 设置SelectPicPopupWindow弹出窗体的高
23         this.setHeight(LayoutParams.WRAP_CONTENT);
24         // 设置SelectPicPopupWindow弹出窗体可点击
25         this.setFocusable(true);
26         this.setOutsideTouchable(true);
27         // 刷新状态
28         this.update();
29         // 实例化一个ColorDrawable颜色为半透明
30         ColorDrawable dw = new ColorDrawable(0000000000);
31         // 点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作
32         this.setBackgroundDrawable(dw);
33         // mPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog);
34         // 设置SelectPicPopupWindow弹出窗体动画效果
35         this.setAnimationStyle(R.style.AnimationPreview);
36         LinearLayout send = (LinearLayout) conentView
37                 .findViewById(R.id.send);
38         LinearLayout mySend = (LinearLayout) conentView
39                 .findViewById(R.id.my_send);
40         LinearLayout all = (LinearLayout) conentView.findViewById(R.id.all);
41         send.setOnClickListener(new View.OnClickListener() {
42
43             @Override
44             public void onClick(View arg0) {
45                 LostPopupWindow.this.dismiss();
46                 lost.onLost(2);
47             }
48         });
49
50         mySend.setOnClickListener(new View.OnClickListener() {
51
52             @Override
53             public void onClick(View v) {
54                 LostPopupWindow.this.dismiss();
55                 lost.onLost(1);
56             }
57         });
58
59         all.setOnClickListener(new View.OnClickListener() {
60             @Override
61             public void onClick(View v) {
62                 LostPopupWindow.this.dismiss();
63                 lost.onLost(0);
64             }
65         });
66     }
67
68     /**
69      * 显示popupWindow
70      *
71      * @param parent
72      */
73     public void showPopupWindow(View parent) {
74         if (!this.isShowing()) {
75             // 以下拉方式显示popupwindow
76             this.showAsDropDown(parent, parent.getLayoutParams().width / 2, 18);
77         } else {
78             this.dismiss();
79         }
80     }
81
82 }
R.layout.lost_pop_menu文件
 1 <?xml version="1.0" encoding="utf-8"?>
 2
 3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4     android:layout_width="200dp"
 5     android:layout_height="wrap_content"
 6     android:layout_alignParentRight="true"
 7     android:background="@drawable/black_menu_pop_bg"
 8     android:orientation="vertical"
 9     android:paddingLeft="@dimen/activity_horizontal_margin">
10
11     <LinearLayout
12         android:id="@+id/send"
13         android:layout_width="match_parent"
14         android:layout_height="40dp"
15         android:gravity="center_vertical"
16         android:orientation="horizontal"
17         android:scaleType="fitXY">
18
19         <ImageView
20             android:id="@+id/img5"
21             android:layout_width="20dp"
22             android:layout_height="20dp"
23             android:src="@drawable/icon_lost_add" />
24
25         <TextView
26             android:id="@+id/item_content"
27             android:layout_width="wrap_content"
28             android:layout_height="wrap_content"
29             android:layout_marginLeft="10dp"
30             android:text="发布信息"
31             android:textColor="#e5e5e6"
32             android:textSize="18sp" />
33     </LinearLayout>
34
35     <View
36         android:layout_width="match_parent"
37         android:layout_height="1px"
38         android:background="#616467" />
39
40     <LinearLayout
41         android:id="@+id/my_send"
42         android:layout_width="match_parent"
43         android:layout_height="40dp"
44         android:gravity="center_vertical"
45         android:orientation="horizontal">
46
47         <ImageView
48             android:id="@+id/img6"
49             android:layout_width="20dp"
50             android:layout_height="20dp"
51             android:scaleType="fitXY"
52             android:src="@drawable/icon_lost_my" />
53
54         <TextView
55             android:id="@+id/item_content1"
56             android:layout_width="wrap_content"
57             android:layout_height="wrap_content"
58             android:layout_marginLeft="10dp"
59             android:text="我发布的信息"
60             android:textColor="#e5e5e6"
61             android:textSize="18sp" />
62     </LinearLayout>
63     <View
64         android:layout_width="match_parent"
65         android:layout_height="1px"
66         android:background="#616467" />
67
68     <LinearLayout
69         android:id="@+id/all"
70         android:layout_width="match_parent"
71         android:layout_height="40dp"
72         android:gravity="center_vertical"
73         android:orientation="horizontal">
74
75         <ImageView
76             android:id="@+id/img7"
77             android:layout_width="20dp"
78             android:layout_height="20dp"
79             android:scaleType="fitXY"
80             android:src="@drawable/icon_all" />
81
82         <TextView
83             android:id="@+id/item_content2"
84             android:layout_width="wrap_content"
85             android:layout_height="wrap_content"
86             android:layout_marginLeft="10dp"
87             android:text="全部信息"
88             android:textColor="#e5e5e6"
89             android:textSize="18sp" />
90     </LinearLayout>
91 </LinearLayout>

动画R.style.AnimationPreview

 1  <style name="AnimationPreview">
 2         <item name="android:windowEnterAnimation">@anim/fade_in</item>
 3         <item name="android:windowExitAnimation">@anim/fade_out</item>
 4     </style>
 5
 6
 7
 8 @anim/fade_in
 9
10 <?xml version="1.0" encoding="utf-8"?>
11 <!-- 左上角扩大-->
12 <scale   xmlns:android="http://schemas.android.com/apk/res/android"
13     android:interpolator="@android:anim/accelerate_decelerate_interpolator"
14     android:fromXScale="0.001"
15     android:toXScale="1.0"
16     android:fromYScale="0.001"
17     android:toYScale="1.0"
18     android:pivotX="100%"
19     android:pivotY="10%"
20     android:duration="200" />
21
22
23 @anim/fade_out
24
25 <!-- 左上角缩小 -->
26 <scale   xmlns:android="http://schemas.android.com/apk/res/android"
27     android:interpolator="@android:anim/accelerate_decelerate_interpolator"
28     android:fromXScale="1.0"
29     android:toXScale="0.001"
30     android:fromYScale="1.0"
31     android:toYScale="0.001"
32     android:pivotX="100%"
33     android:pivotY="10%"
34     android:duration="200" />

接下来就是使用了

 1  LostPopupWindow popWindow = new LostPopupWindow(ZiXunDetailActivity.this);
 2                 ((ImageView)(popWindow.getConentView().findViewById(R.id.img5))).setImageResource(R.drawable.ckplico);
 3                 ((ImageView)(popWindow.getConentView().findViewById(R.id.img6))).setImageResource(R.drawable.fbplico);
 4                 ((ImageView)(popWindow.getConentView().findViewById(R.id.img7))).setImageResource(R.drawable.zfplico);
 5                 ((TextView)(popWindow.getConentView().findViewById(R.id.item_content))).setText("查看评论");
 6                 ((TextView)(popWindow.getConentView().findViewById(R.id.item_content1))).setText("发表评论");
 7                 ((TextView)(popWindow.getConentView().findViewById(R.id.item_content2))).setText("转发文章");
 8                 popWindow.showPopupWindow(linMain);
 9                 popWindow.onLost(new Lost() {
10                     @Override
11                     public void onLost(int index) {
12                         switch (index){
13                             case 0: //转发文章
14                                 break;
15                             case 1:      //发表评论
16                                 lineFooter.setVisibility(View.VISIBLE);
17                                 break;
18                             case 2://查看评论
19                                 Bundle bundle=new Bundle();
20                                 bundle.putString("id",mID);
21                                 startActivity(PingLunActivity.class, "热门评论", bundle);
22                                 break;
23                         }
24                     }
25                 });

效果图

大家以后遇到类似的可以模仿使用

				
时间: 2024-12-18 08:33:31

自定义PopupWindow弹出框(带有动画)的相关文章

练习PopupWindow弹出框之实现界面加载的时候显示弹出框到指定的view下面--两种延迟方法

今天在练习PopupWindow弹出框的时候,打算在界面加载的时候将弹出框展现出来并显示在指定的view下面. 初步方法是直接在OnResume方法里面直接执行showPopupWindows方法. 但是报“Unable to add window -- token null is not valid; is your activity running?” 原因参考:http://cb269267.iteye.com/blog/1787779 总结下原因如下:popupwindow必须要指定一个

自定义的弹出框列表适配器,类似于大众点评或美团

无意下载一个代码, 还不错,记录一下,说不定以后会用到.效果图如下 整体工程是引入了一个library,当然完全可以写到一个工程里面,如下截图 代码还是很好理解的, 下面贴出来,顺便又加了一些注释 1.MainActivity.java public class MainActivity extends ActionBarActivity { private PopupButton btn; private PopupButton btn2; private LayoutInflater inf

自定义PobUpwindow弹出框

在做分享这一块的时候,用到弹出框的功能,还必须得有点击返回键,同样可以撤销显示的弹出框,于是自己就动手写了一个,一切看代码: public class ShareBoardPicker implements OnClickListener { private Context mContext; private SharePobupWindow mPopupWindow;//分享框 private LinearLayout layout; private RelativeLayout mWeixi

自定义popup弹出框

ys_popup.css .ys-popup{     position:fixed;     top:0;     bottom:0;     left:0;     right:0;     display:none;     z-index: 99999;     background-color: rgba(0,0,0,0.4); } .ys-popup .ys-popup-content{     position:absolute;     left:30px;     right:

iOS自定义提示弹出框(类似UIAlertView)

菜鸟一枚,大神勿喷.自己在牛刀小试的时候,发现系统的UIAlertView有点不喜欢,然后就自己自定义了一个UIAlertView,基本上实现了系统的UIAlertView,可以根据项目的需求修改UIAlertView的颜色.欢迎大神多多指导.不胜感激! 效果图: Paste_Image.png --------------直接贴代码---------不喜勿喷----------大神多多指导.不胜感激!------- #import <UIKit/UIKit.h> typedef void(^

PopupWindow弹出框与背景变暗的实现(附带动画效果)

效果图: 1,定义popupWindow 布局 2,在mainactivity.xml 中设置 用来显示 popupwindow的 布局 3,MainActivity当中 设置popupwindow的 监听事件 4 设置popupWindow 显示的动画效果 out_fromtop.xml in_fromtop.xml ok 下载源码  版权声明:本文为博主原创文章,未经博主允许不得转载.

swing自定义JDialog弹出框

第一次搞swing,自定义JDialog的例子较少,写下来备忘 ,对JDialog中的文本框进行了验证 package com.chauvet; import java.awt.Component;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent

ionic中自定义底部弹出框

通用部分:<script>     MY_FUNCTION = (function() {        var upSheet = document.createElement('div');        upSheet.setAttribute('style', 'display:none;position:absolute;left:0px;top:0px;z-index: 9999;');        upSheet.style.width = document.documentE

自定义弹出框效果

对网站而言,弹出框是比较常见的.或是给出用户操作提示,或是通过弹出框打开一个小窗口以提示信息,或是给出错误警示等等. 但是由于浏览器自带的弹出窗口alert , confirm , prompt样式比较单调,且不同浏览器有不同的默认样式设置. 所以在日常工作中,给网站做一个自定义的弹出框十分必要.特别是富交互的网站 一.提示框 html部分: 1 <!--修改弹窗--> 2 <div class="pop-alert" id="pop" style