popwindow详解

来源:互联网 发布:unity3d vector2 编辑:程序博客网 时间:2024/06/05 08:48

  我上一篇文章讲解截安卓动画的最基本的东西,而怎么实现它们是要一个载体的。我这篇文章讲的就是其中一中实现方  式: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);}
原创粉丝点击