一、布局
<?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" ><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:clickable="true"android:gravity="center"android:textColor="@android:color/holo_orange_dark"android:text="确定" /><TextViewandroid: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
<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"/> --><scaleandroid: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动画持续时间 --><!--透明度--><alphaandroid: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"><!-- <translateandroid:duration="5000"android:fromXDelta="0"android:toXDelta="100%"/>--><scaleandroid:fromXScale="0.8"android:fromYScale="0.5"android:pivotX="50%"android:pivotY="50%"android:toXScale="0"android:toYScale="0"android:duration="200"/><alphaandroid: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);//设置ViewsetContentView(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() {@Overridepublic 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,0);lightOff();/** * 消失时屏幕变亮 */myPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {@Overridepublic 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,null);//设置ViewsetContentView(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() {@Overridepublic 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() {}}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。