PopupWindow

这篇博客详细介绍了如何在Android中自定义PopupWindow,包括设置背景、透明度、宽高、点击事件以及添加动画效果。通过创建`MyPopupWindow`类并实现`OnClickListener`,博主展示了如何在点击按钮后关闭弹窗或者执行特定操作。同时,还提供了进入和退出的动画XML以及在主题资源中定义的样式。
摘要由CSDN通过智能技术生成

PopupWindow

效果图:

在这里插入图片描述点击后弹出
在这里插入图片描述效果图,具体嗨可以自定义里面添加属性,背景颜色图片透明度等等。

自定义

public class MyPopupWindow extends PopupWindow implements View.OnClickListener{

    private Context context ;
    private View view ;
    private Button button1 , button2 ,button3 ;

    public MyPopupWindow(Context context) {
        super(context);
        this.context = context;
        //绑定布局
        Log.e("---------","33333333333333");
        view = LayoutInflater.from(context).inflate(R.layout.popupwindow_layout,null);
        //实例化控件
        init();
        //设置外部可以点击
        setOutsideTouchable(true);
        //设置窗口
        setContentView(view);
        //设置弹出窗的高度
        setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
        //设置弹出窗的宽度
        setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
        //设置弹出窗可点击
        setFocusable(true);
        //设置弹出窗动画
        setAnimationStyle(R.style.my_popupWindow_anim);
        //设置点击区域,如若在选项框外,则退出弹出框。
        view.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int height = view.findViewById(R.id.pp_layout).getTop();
                int y = (int) event.getY();

                if (event.getAction() == MotionEvent.ACTION_UP){

                    if (y < height){
                        dismiss();
                    }
                }
                return true;
            }
        });
    }

    private void init() {

        button1 = view.findViewById(R.id.button1) ;
        button1.setOnClickListener(this);
        button2 = view.findViewById(R.id.button2) ;
        button2.setOnClickListener(this);
        button3 = view.findViewById(R.id.button3) ;
        button3.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){

            case R.id.button3:

                dismiss();

                break;

            case R.id.button2:
                Toast.makeText(context,"点击了按钮2",Toast.LENGTH_SHORT).show();
                break;

            case R.id.button1:
                Toast.makeText(context,"点击了按钮1",Toast.LENGTH_SHORT).show();
                break;

        }
    }
}

调用

public void onClick(View v) {
        switch (v.getId()){

            case R.id.xz_button:

                MyPopupWindow myPopupWindow = new MyPopupWindow(getApplicationContext());
                // main_view是从哪个界面上弹出popopWindow的那个view布局。
                myPopupWindow.showAtLocation(findViewById(R.id.main_view), Gravity.CENTER,0,0);

                break;

        }
    }

XML布局
anim显示方式

<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:duration="200"
        android:fromYDelta="100%p"
        android:toYDelta="0" />
    <alpha
        android:duration="200"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />

</set>

anim退出方式

<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:duration="200"
        android:fromYDelta="0"
        android:toYDelta="50%p" />
    <alpha
        android:duration="200"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />

</set>

在them资源里创建style

<style name="my_popupWindow_anim" parent="Animation.Design.BottomSheetDialog">

        <item name="android:windowEnterAnimation">@anim/enter</item>
        <item name="android:windowExitAnimation">@anim/exit</item>

    </style>

学习时间:

提示:这里可以添加计划学习的时间
例如:
1、 周一至周五晚上 7 点—晚上9点
2、 周六上午 9 点-上午 11 点
3、 周日下午 3 点-下午 6 点


学习产出:

提示:这里统计学习计划的总量
例如:
1、 技术笔记 2 遍
2、CSDN 技术博客 3 篇
3、 学习的 vlog 视频 1 个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值