先来看看效果图:
一、布局
<?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实例代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)