popwindow详解

  我上一篇文章讲解截安卓动画的最基本的东西,而怎么实现它们是要一个载体的。我这篇文章讲的就是其中一中实现方  式:popwindow.

 popwindow直译过来就是突然出现的弹框,比如我们在任何一款app当中基本都有个头像,你点击它就会出现个弹框让你选择是拍照还是从系统中选择照片(这个内容我会在稍后的文章中详细讲解),而这个弹框就是popWindow了。

  一.创建popwindow。

View popView = View.inflate(this, R.layout.popowindow_photo, null);
        popupWindow = new PopupWindow(popView,
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.WRAP_CONTENT);
        popupWindow.setAnimationStyle(R.style.PopupAnimation); // 设置弹出动画
        ColorDrawable colorDrawable = new ColorDrawable(getResources()
                .getColor(R.color.transparent));
        popupWindow.setBackgroundDrawable(colorDrawable);// 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框
        // popupWindow.setBackgroundDrawable(new BitmapDrawable(
        // getApplicationContext().getResources(), Bitmap.createBitmap(1,
        // 1, Bitmap.Config.ARGB_8888)));

        popupWindow.setFocusable(true);// 设置PopupWindow可获得焦点
        popupWindow.setOutsideTouchable(true);// PopupWindow以外的区域是否可点击,点击后是否会消失。
        cancle = (Button) popView.findViewById(R.id.btn_cancle);
        cancle.setOnClickListener(this);
        photo = (TextView) popView.findViewById(R.id.photo_ing);
        photo.setOnClickListener(this);
        look = (TextView) popView.findViewById(R.id.photo_look);
        look.setOnClickListener(this);
        // popupWindow消失时监听
        popupWindow.setOnDismissListener(new OnDismissListener() {

            @Override
            public void onDismiss() {
                backgroundAlpaha(UserActivity.this, 1.0f);
            }
        });


R.layout.popowindow_photo是你显示给用户看的pipwindow界面。
R.style.PopupAnimation
弹出的动画效果,在moudle的res/values/style.xml中创建
 <!-- popwindow的样式 -->
    <style name="PopupAnimation" parent="android:Animation">
        <item name="android:windowEnterAnimation">@anim/popup_enter</item>
        <item name="android:windowExitAnimation">@anim/popup_exit</item>
    </style>
@anim/popup_enter就是我上篇文章提到的动画效果其中的一种。
android:windowEnterAnimation代表popWindow出现时的动画,
android:windowExitAnimation代表popWindow消失时的动画。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <scale
        android:duration="300"
        android:fromXScale="0.6"
        android:fromYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.0"
        android:toYScale="1.0" />

    <alpha
        android:duration="300"
        android:fromAlpha="0.0"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toAlpha="1.0" />

</set>
popupWindow.setOnDismissListener(new OnDismissListener()
这个是一个监听popWindow消失时事件,就是popWindow消失时改做啥!
backgroundAlpaha(UserActivity.this, 1.0f)即
   /**
     * 设置添加屏幕的背景透明度
     */
    public void backgroundAlpaha(Activity context, float bgAlpha) {
        WindowManager.LayoutParams lp = context.getWindow().getAttributes();
        lp.alpha = bgAlpha;
        context.getWindow()
                .addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        context.getWindow().setAttributes(lp);
    }
我们都知道任何弹框的出现背景都会变暗,凸显dialog的“闪亮登场”吐舌头,popWindow也是一样的,我在他出现的时候将它设成
正常背景alpha(透明度)的一半,等它消失的时候在设回来。

二.popWindow的显示

  /**
     * popwindow显示
     */
    private void popWindow() {
        View rootView = findViewById(R.id.useractivity); // 设置当前根目录
        DisplayMetrics dm = getResources().getDisplayMetrics();
        int y = dm.heightPixels * 1 / 12;
        //相对位移,popwindow出现在距离底部整个屏幕1/12距离
        popupWindow.showAtLocation(rootView, Gravity.BOTTOM, 0, y);
        // popupWindow.update();//更新后显示,比如做了长宽缩小放大的处理
        backgroundAlpaha(this, 0.5f);}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值