星空网 > 软件开发 > 操作系统

自定义PopupWindow

 

自定义PopupWindowimages/loading.gif' data-original="http://images2015.cnblogs.com/blog/710715/201608/710715-20160801185754747-2009398388.gif" />

 一、布局

 

<??><LinearLayout ="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:orientation="vertical"  android:background="#ffffff"  android:padding="20dp" >  <TextView    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:clickable="true"    android:gravity="center"    android:textColor="@android:color/holo_orange_dark"    android:text="确定" />  <TextView    android:layout_marginTop="20dp"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_marginBottom="10dp"    android:clickable="true"    android:gravity="center"    android:text="取消" /></LinearLayout>

二、自定义MypopupWindow继承PopupWindow

public class MyPopupWindow extends PopupWindow {

 

 

三、重写构造方法与动画样式

在styles.

<style name="MyPopupWindow">    <item name="android:windowEnterAnimation">@anim/pop_in</item>    <item name="android:windowExitAnimation">@anim/pop_out</item>  </style>

 

pop_in
<??><set ="http://schemas.android.com/apk/res/android">  <!-- 平移  <translate     android:duration="5000"     android:fromXDelta="100%"     android:toXDelta="0"/>     -->  <scale    android:fromXScale="0"    android:fromYScale="0"    android:pivotX="50%"    android:pivotY="50%"    android:toXScale="0.8"    android:toYScale="0.5"    android:duration="200"/>  <!--fromXScalefromYScale起始时X,Y座标,pivotXpivotY动画起始位置,相对于屏幕的百分比,两个都为50%表示动画从屏幕中间开始toXScaletoYScale动画最终缩放的倍数, 1.0为正常大小,大于1.0放大duration动画持续时间 -->  <!--透明度-->  <alpha    android:duration="200"    android:fromAlpha="0.0"    android:toAlpha="1.0"/></set>

pop_out
<??><set ="http://schemas.android.com/apk/res/android">  <!-- <translate    android:duration="5000"    android:fromXDelta="0"    android:toXDelta="100%"/>-->  <scale    android:fromXScale="0.8"    android:fromYScale="0.5"    android:pivotX="50%"    android:pivotY="50%"    android:toXScale="0"    android:toYScale="0"    android:duration="200"/>  <alpha    android:duration="200"    android:fromAlpha="1.0"    android:toAlpha="0.0"/></set>

 

四、重写构造方法并设置点击外部可以消失监听

 super(context);    this.mContext=context;    //打气筒    mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    //打气    mContentView = mInflater.inflate(R.layout.layout_dialog,null);    //设置View    setContentView(mContentView);    //设置宽与高    setWidth(WindowManager.LayoutParams.MATCH_PARENT);    setHeight(WindowManager.LayoutParams.WRAP_CONTENT);    /**     * 设置进出动画     */    setAnimationStyle(R.style.MyPopupWindow);    /**     * 设置背景只有设置了这个才可以点击外边和BACK消失     */    setBackgroundDrawable(new ColorDrawable());    /**     * 设置可以获取集点     */    setFocusable(true);    /**     * 设置点击外边可以消失     */    setOutsideTouchable(true);    /**     *设置可以触摸     */    setTouchable(true);    /**     * 设置点击外部可以消失     */    setTouchInterceptor(new View.OnTouchListener() {      @Override      public boolean onTouch(View v, MotionEvent event) {        /**         * 判断是不是点击了外部         */        if(event.getAction()==MotionEvent.ACTION_OUTSIDE){          return true;        }        //不是点击外部        return false;      }    });    

 

五、显示及设置窗口变暗与变亮

public void displayDialog(View view){    MyPopupWindow myPopupWindow = new MyPopupWindow(this);    myPopupWindow.showAsDropDown(mBtnDispaly,0,0);    lightOff();    /**     * 消失时屏幕变亮     */    myPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {      @Override      public void onDismiss() {        WindowManager.LayoutParams layoutParams = getWindow().getAttributes();        layoutParams.alpha=1.0f;        getWindow().setAttributes(layoutParams);      }    });  }  /**   * 显示时屏幕变暗   */  private void lightOff() {    WindowManager.LayoutParams layoutParams = getWindow().getAttributes();    layoutParams.alpha=0.3f;    getWindow().setAttributes(layoutParams);  }

六、完整

package liu.basedemo.view;import android.content.Context;import android.graphics.drawable.ColorDrawable;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.WindowManager;import android.widget.PopupWindow;import liu.basedemo.R;/** * 学习PopupWindow * Created by 刘楠 on 2016/8/1 0001.17:42 */public class MyPopupWindow extends PopupWindow {  Context mContext;  private LayoutInflater mInflater;  private View mContentView;  public MyPopupWindow(Context context) {    super(context);    this.mContext=context;    //打气筒    mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    //打气    mContentView = mInflater.inflate(R.layout.layout_dialog,null);    //设置View    setContentView(mContentView);    //设置宽与高    setWidth(WindowManager.LayoutParams.MATCH_PARENT);    setHeight(WindowManager.LayoutParams.WRAP_CONTENT);    /**     * 设置进出动画     */    setAnimationStyle(R.style.MyPopupWindow);    /**     * 设置背景只有设置了这个才可以点击外边和BACK消失     */    setBackgroundDrawable(new ColorDrawable());    /**     * 设置可以获取集点     */    setFocusable(true);    /**     * 设置点击外边可以消失     */    setOutsideTouchable(true);    /**     *设置可以触摸     */    setTouchable(true);    /**     * 设置点击外部可以消失     */    setTouchInterceptor(new View.OnTouchListener() {      @Override      public boolean onTouch(View v, MotionEvent event) {        /**         * 判断是不是点击了外部         */        if(event.getAction()==MotionEvent.ACTION_OUTSIDE){          return true;        }        //不是点击外部        return false;      }    });    /**     * 初始化View与**     */    initView();    initListener();  }  private void initView() {  }  private void initListener() {  }}

 




原标题:自定义PopupWindow

关键词:win

win
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

谨防诈骗:警方通报拖欠货款跑路外贸公司名单!:https://www.ikjzd.com/articles/12953
盘点亚马逊新规,对卖家有何影响?:https://www.ikjzd.com/articles/129532
亚马逊卖家如何防止跟卖?:https://www.ikjzd.com/articles/129533
黑五你需要注意的事项:https://www.ikjzd.com/articles/129534
跨境电商资料工具整理合集!:https://www.ikjzd.com/articles/129535
教你如何在亚马逊的爆款影子中实现快速选品:https://www.ikjzd.com/articles/129536
无锡旅游景点竹海 - 无锡的竹海:https://www.vstour.cn/a/363178.html
5月贾汪好玩的地方 贾汪哪有好玩的地方:https://www.vstour.cn/a/363179.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流