• 首先是布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/popup_linear"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/translucent"android:orientation="vertical"><LinearLayout
        android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:gravity="center"android:layout_marginTop="14dp"android:padding="14dp"><ImageView
            android:id="@+id/img_type"android:layout_width="wrap_content"android:layout_height="wrap_content"android:scaleType="centerInside"/></LinearLayout><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/bg_popup_photo"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:orientation="vertical" ><TextView
            android:id="@+id/take_photo_tv"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:padding="15dp"android:textSize="@dimen/text_medium"android:text="拍照"android:textColor="@color/blue" /><View
            android:layout_width="match_parent"android:layout_height="1px"android:background="@color/divide_line" /><TextView
            android:id="@+id/gallery_photo_tv"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:padding="15dp"android:text="从手机相册选择"android:textSize="@dimen/text_medium"android:textColor="@color/blue" /></LinearLayout><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/bg_popup_photo"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:layout_marginTop="10dp"android:layout_marginBottom="20dp"android:orientation="vertical" ><TextView
        android:id="@+id/photo_cancle"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:padding="15dp"android:textSize="@dimen/text_medium"android:text="取消"android:textColor="@color/blue" /></LinearLayout>
</LinearLayout>
  • 布局里的最外层布局可以是透明的也可以是半透明的,可以在下面设置。translucent这个是半透明
 public ImagePopupWindow(Context context) {
//        super(context);this.mContext=context;LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);View view = inflater.inflate(R.layout.popup_get_pic, null);setContentView(view);//这句话必须要有,如果没有点击背景是全黑,除非你先点击了别的设置了这个属性的popupwindowview.getBackground().setAlpha(150);//设置宽和高setWidth(LayoutParams.MATCH_PARENT);setHeight(LayoutParams.MATCH_PARENT);setTouchable(true);//这个控制PopupWindow内部控件的点击事件,但是我的项目中没用这个也能点击。setFocusable(true);//点击外部是否可消去,需要与上面的属性配合使用,都为true可消去,都为false不可消去,也有说法是setOutsideTouchable必须和setBackgroundDrawable同时用才好用,没试过,就都写上了。setOutsideTouchable(true);//设置透明的颜色背景。以前的那个方法过时了用这个,与下面一个意思就是分开不开写的区别,在这可以设置背景色,也可以在布局里设置背景色setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
//         //实例化一个ColorDrawable颜色为半透明
//        ColorDrawable dw = new ColorDrawable(0xb0000000);
//        // 设置弹出窗体的背景
//        this.setBackgroundDrawable(dw);//设置动画效果this.setAnimationStyle(R.style.popupAnimationTwo);initView(view);setListener();}
  • 进和出的动画效果放在style里
 <style name="popupAnimation" parent="android:Animation"><item name="android:windowEnterAnimation">@anim/popup_in</item><item name="android:windowExitAnimation">@anim/popup_out</item></style>
  • 进和出的动画效果放在anim里

  • 进入动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">//移动<translate
        android:duration="300"//动画时间android:fromYDelta="100%p"//开始位置,p为parent,相对于父类,100%p也就是在最底部android:toYDelta="0" />//结束位置,0也就是在最上边//透明度<alpha
        android:duration="300"android:fromAlpha="0.0"//透明度由透明到不透明android:toAlpha="1.0" />
</set>
  • 出的动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translate
        android:duration="300"android:fromYDelta="0"android:toYDelta="100%p" /><alpha
        android:duration="300"android:fromAlpha="1.0"android:toAlpha="0.0" />
</set>

但是这个做,半透明的背景也会从底部弹出,有动画效果,个人感觉不好看,所以可以这个改,在布局和popupwindow里面背景设置为透明,然后在用到popupwindow的地方 用下面的方法

imgPop = new ImagePopupWindow(this);imgPop.showAtLocation(mHeadIv, Gravity.CENTER, 0, 0);imgPop.setOnPicTypeListener(new ImagePopupWindow.OnPicTypeListener() {
//            @Override
//            public void onCamera() {//                //ImageChooseUtils.doCameraPhoto(AddColorActivity.this);
                GalleryFinal.openCamera(1,mOnHanlderResultCallback);
//                photoUtil=new PhotoUtil(PersonalDataActivity.this);
//
//            }@Overridepublic void onPhoto() {GalleryFinal.openGallerySingle(2, mOnHanlderResultCallback);}});backgroundAlpha(0.7f);imgPop.setOnDismissListener(new PopupWindow.OnDismissListener() {@Overridepublic void onDismiss() {backgroundAlpha(1f);}});/*** 设置添加屏幕的背景透明度* @param bgAlpha*/public void backgroundAlpha(float bgAlpha){WindowManager.LayoutParams lp = getWindow().getAttributes();lp.alpha = bgAlpha; //0.0-1.0getWindow().setAttributes(lp);}
  • 贴一份完整的代码(布局已经有了)
public class SexPopupWindow extends PopupWindow implements OnClickListener {public TextView mWoman, mMan, mClance;public LinearLayout li;public OnSexTypeListener onSexTypeListener;public SexPopupWindow(Context context) {super(context);LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);View view = inflater.inflate(R.layout.popup_sex, null);setContentView(view);view.getBackground().setAlpha(150);setWidth(LayoutParams.MATCH_PARENT);setHeight(LayoutParams.MATCH_PARENT);setFocusable(true);setOutsideTouchable(true);setBackgroundDrawable(new BitmapDrawable());this.setAnimationStyle(R.style.popupAnimation);initView(view);setListener();}private void initView(View view) {mWoman = (TextView)view.findViewById(R.id.woman_tv);mMan = (TextView)view.findViewById(R.id.man_tv);mClance = (TextView)view.findViewById(R.id.cancle_tv);li = (LinearLayout)view.findViewById(R.id.popup_linear);}private void setListener() {mWoman.setOnClickListener(this);mMan.setOnClickListener(this);mClance.setOnClickListener(this);li.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.woman_tv:onSexTypeListener.onWoman();dismiss();break;case R.id.man_tv:onSexTypeListener.onMan();dismiss();break;case R.id.cancle_tv:dismiss();break;case R.id.popup_linear:dismiss();break;}}public void setOnSexTypeListener(OnSexTypeListener l){onSexTypeListener = l;}public interface OnSexTypeListener {void onWoman();void onMan();}}
sexPop = new SexPopupWindow(this);sexPop.showAtLocation(mHeadIv, Gravity.CENTER, 0, 0);sexPop.setOnSexTypeListener(new SexPopupWindow.OnSexTypeListener() {@Overridepublic void onWoman() {mSexTv.setText("女性");}@Overridepublic void onMan() {mSexTv.setText("男性");}});

popupwindow 底部弹出+背景半透明相关推荐

  1. PopupWindow底部弹出,底部UI被遮盖问题

    之前做项目的时候也碰到过PopupWindow从底部弹出,界面底部的UI有一部分被遮盖了.之前碰到这个问题的大多是类似华为手机之类的有虚拟按键的手机.可是这次我用来运行的机子是模拟机,也没有虚拟按键之 ...

  2. html透明页面锁定窗口,CSS弹出背景半透明窗口

    弹出窗口,背景半透明 body{margin:0px;} #bg{width:100%;height:100%;top:0px;left:0px;position:absolute;filter: A ...

  3. 底部弹出PopupWindow并且背景变为半透明效果

    来自:http://blog.csdn.net/LANG791534167/article/details/48985101 先来看看运行效果图 [方式一]实现从底部弹出PopupWindow 原理: ...

  4. 【Android】Activity和PopupWindow都实现从底部弹出或滑出选择菜单或窗口

    使用Activity和PopupWindow都实现从底部弹出或滑出选择菜单或窗口 [Android]测试与popwindow PopupWindow转载自:Android PopupWindow实现从 ...

  5. android PopupWindow实现从底部弹出或滑出选择菜单或窗口

    android PopupWindow实现从底部弹出或滑出选择菜单或窗口 http://www.open-open.com/lib/view/open1379383271818.html http:/ ...

  6. Android自定义底部弹出窗-dialog(2种实现分析+源码)

    Android自定义底部弹出窗-dialog(2种实现分析+源码) 上线项目功能抽取,在项目开发中,我们会在许多地方会用到底部自定义弹窗,比如设置:个人账户退出,切换,照片的拍照或者相册的调出,或者一 ...

  7. Android仿IOS封装通用的弹出框Dialog和底部弹出列表选择框 仿美团顶部条件筛选框 附自定义ViewGroup

    弹出框 背景 提示与询问弹出框 实现 使用 列表选择框 实现 使用 顶部条件筛选框 实现 自定义ViewGroup 使用 总结 背景 鉴于Android提供的默认弹出框很一般,IOS的弹出框样式还不错 ...

  8. Android——完全自定义 底部弹出支付页面

    近期博主在网上随便搜了一番,发现很多实现 底部弹出支付页面的大多数都用的,自定义PopupWindow 去实现的,里面复杂的逻辑看得我不想看,很多对自定义不熟悉伙伴们,看到 自定义 这三个字就有种血脉 ...

  9. Android之popWindows底部弹出挡住了华为虚拟键盘问题

    1.问题 使用popWindows的时候底部弹出遮挡华为虚拟键盘 2.解决办法 在调用下面代码之前 popupWindow.showAtLocation 加上如下的代码进行设置 popupWindow ...

最新文章

  1. 多路径配置udev_ASM磁盘多路径及udev配置
  2. android系统 通知管理,Android的通知系统
  3. 3-07. 求前缀表达式的值(25) (ZJU_PAT数学)
  4. YUI经验谈 - 自定义事件默认行为
  5. 计算机网络链接的主要目标 主要功能,计算机网络课程教案‌.doc
  6. python 内置运算
  7. python单词的含义-Python这个单词是什么含义??????????????
  8. Android4.4 多媒体开发(五)----OpenMax简介
  9. 移植SlidingMenu Android library,和安装example出现的问题解决
  10. Java 代码混淆器
  11. 拓端tecdat|SAS用梯度提升回归树(GBDT)迁移学习预测抵押贷款拖欠风险和垃圾电子邮件数据
  12. excel vba 数据分析
  13. 苹果开发者新账号上新app审核被拒绝:Other-Other被拒绝,心路历程记录!
  14. PaMIR: Parametric Model-Conditioned Implicit Representation for Image-based Human Reconstruction
  15. Dreamweaver cs3快捷键一览
  16. 服务器虚拟机ping不通百度,未知的名称或服务,解决方法
  17. 监控摄像头服务器维护要多久,监控摄像头如何维护 监控摄像头维护方法【详解】...
  18. idea远程断点调试
  19. 阿里云服务器怎么样可以实现 frp 内网穿透
  20. spark 的lit是什么_什么是LIT文件(以及如何打开一个文件)?

热门文章

  1. 计算机故障维修要遵循什么原则,计算机故障排除原则和方法;
  2. 激光打印机的原理、碳粉分类
  3. 电击脖子还能抗疲劳?FDA在20年前就已批准这种疗法
  4. 根据经纬度确定行政区域_获取中国指定行政区域内所有POIS(兴趣点)的方法
  5. docker服务器版搭建pikachu靶场
  6. 逆天了,俄罗斯黑客一口气黑掉60多所大学和政府机构
  7. 暗通道去雾法-对算法的理解Dark Channel Prior
  8. 西安电子科技大学计算机科学与技术排名,西安电子科技大学双一流学科名单2个...
  9. Qt 5.9.5学习笔记第三节课
  10. 【数学理论】最优化问题:拉格朗日乘子法、KKT条件以及对偶问题