Android自定义popupwindow实例代码

Android自定义popupwindow实例代码,第1张

概述先来看看效果图:一、布局 <?xmlversion=\"1.0\"encoding=\"utf-8\"?><LinearLayoutxmlns:android=\"http://schemas.android.com/apk/res/android\"

先来看看效果图:

一、布局 

<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="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>

2、自定义MypopupWindow继承PopupWindow

public class MyPopupWindow extends PopupWindow {  

3、重写构造方法与动画样式
在styles.xml自定义样式,动画

<style name="MyPopupWindow">    <item name="androID:windowEnteranimation">@anim/pop_in</item>    <item name="androID:windowExitAnimation">@anim/pop_out</item>  </style>

 pop_in

<?xml version="1.0" enCoding="utf-8"?><set xmlns:androID="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

<?xml version="1.0" enCoding="utf-8"?><set xmlns:androID="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>

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

 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;      }    });

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

public voID displayDialog(VIEw vIEw){    MyPopupWindow myPopupWindow = new MyPopupWindow(this);    myPopupWindow.showAsDropDown(mBtndispaly,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);  }

6、完整

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,MotionEvent event) {        /**         * 判断是不是点击了外部         */        if(event.getAction()==MotionEvent.ACTION_OUTSIDE){          return true;        }        //不是点击外部        return false;      }    });    /**     * 初始化VIEw与监听器     */    initVIEw();    initListener();  }  private voID initVIEw() {  }  private voID initListener() {  }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android自定义popupwindow实例代码全部内容,希望文章能够帮你解决Android自定义popupwindow实例代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1147613.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存