安卓右上角的弹框 自定义PopWindow实现

17人阅读 评论(0) 收藏 举报
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;

import com.ylt.gxjkz.youliantong.R;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by hutao on 2018/3/27.
 * 右上角的弹框  如:扫一扫等
 */
public class ShowPopRightTop extends PopupWindow {

    private final View contentView;

    public interface OnItemClick {
        void OnClick(int position);
    }

    public ShowPopRightTop(final Activity context, List<String> mData, final OnItemClick click) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        contentView = inflater.inflate(R.layout.pop_window_right_top, null);

        int height = context.getWindowManager().getDefaultDisplay().getHeight();
        int width = context.getWindowManager().getDefaultDisplay().getWidth();
        //设置SelectPicPopupWindowview
        this.setContentView(contentView);
        // 设置SelectPicPopupWindow弹出窗体的宽
        this.setWidth(width / 3);
        // 设置SelectPicPopupWindow弹出窗体的高
        this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        // 设置SelectPicPopupWindow弹出窗体可点击
        this.setFocusable(true);
        this.setOutsideTouchable(true);
        // 刷新状态
        this.update();
        // 实例化一个ColorDrawable颜色为半透明   0000000000
//        ColorDrawable dw = new ColorDrawable(context.getResources().getColor(R.color.color_ff8300));
        // back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作
        this.setBackgroundDrawable(new ColorDrawable());
//        this.setAnimationStyle(android.R.style.Animation_Dialog);
        // 设置SelectPicPopupWindow弹出窗体动画效果
        this.setAnimationStyle(R.style.AnimationPreview);
        RecyclerView recyclerView = (RecyclerView) contentView.findViewById(R.id.recyclerView);

        recyclerView.setLayoutManager(new LinearLayoutManager(context));

        ShowPopRightTopAdapter myAdapter = new ShowPopRightTopAdapter(context, mData);
        recyclerView.setAdapter(myAdapter);
        myAdapter.setOnItemClickListener(new ShowPopRightTopAdapter.OnItemClickListener() {
            @Override
            public void OnItemClick(int position) {
                click.OnClick(position);
                ShowPopRightTop.this.dismiss();
            }
        });
    }

    public static class ShowPopRightTopAdapter extends RecyclerView.Adapter<ShowPopRightTopAdapter.ViewHolder> {
        private Context context;
        private List<String> mData = new ArrayList<>();

        public ShowPopRightTopAdapter(Context context, List<String> mData) {
            this.context = context;
            this.mData = mData;
        }

        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            return new ViewHolder(LayoutInflater.from(context).inflate(R.layout.item_show_pop_right_top, parent, false));
        }

        @Override
        public void onBindViewHolder(ViewHolder holder, final int position) {
            holder.desc.setText(mData.get(position));
            holder.item.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    listener.OnItemClick(position);
                }
            });
        }

        @Override
        public int getItemCount() {
            return mData.size();
        }

        public class ViewHolder extends RecyclerView.ViewHolder {
            LinearLayout item;
            TextView desc;

            public ViewHolder(View itemView) {
                super(itemView);
                item = (LinearLayout) itemView.findViewById(R.id.item_layout);
                desc = (TextView) itemView.findViewById(R.id.desc);
            }
        }

        private ShowPopRightTopAdapter.OnItemClickListener listener;

        public void setOnItemClickListener(OnItemClickListener listener) {
            this.listener = listener;
        }

        public interface OnItemClickListener {
            void OnItemClick(int position);
        }
    }


    /**
     * 显示popupWindow
     *
     * @param parent
     */
    public void showPopupWindow(View parent) {
        if (!this.isShowing()) {
            // 以下拉方式显示popupwindow
            this.showAsDropDown(parent, parent.getLayoutParams().width / 2 - 10, 0);
        } else {
            this.dismiss();
        }
    }

}

        R.layout.pop_window_right_top  布局文件:
<?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:background="@color/color_7F7F7F"
    android:gravity="center_horizontal"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>
        R.style.AnimationPreview    动画:
<!--右上角弹框的动画   扫一扫的那个弹框-->
<style name="AnimationPreview">
    <item name="android:windowEnterAnimation">@anim/pop_right_top_fade_in</item>
    <item name="android:windowExitAnimation">@anim/pop_right_top_fade_out</item>
</style>
pop_right_top_fade_in   :
<?xml version="1.0" encoding="utf-8"?><!-- 左上角扩大-->
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="100"
    android:fromXScale="0.001"
    android:fromYScale="0.001"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:pivotX="100%"
    android:pivotY="10%"
    android:toXScale="1.0"
    android:toYScale="1.0" />

pop_right_top_fade_out  :
<?xml version="1.0" encoding="utf-8"?><!-- 左上角缩小 -->
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="100"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:pivotX="100%"
    android:pivotY="10%"
    android:toXScale="0.001"
    android:toYScale="0.001" />
R.layout.item_show_pop_right_top  布局文件:
<?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">

    <LinearLayout
        android:id="@+id/item_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_margin="10dp"
            android:gravity="center"
            android:src="@mipmap/icon_delete"
            android:visibility="gone" />

        <TextView
            android:id="@+id/desc"
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:layout_marginLeft="5dp"
            android:gravity="center"
            android:text="扫一扫"
            android:textColor="@color/color_ffffff"
            android:textSize="16sp" />
    </LinearLayout>
</LinearLayout>

使用  :
List<String> popList = new ArrayList<>();
popList.add("第一条");
popList.add("第二条");
ShowPopRightTop showPopRightTop = new ShowPopRightTop(MasterActivity.this, popList, new ShowPopRightTop.OnItemClick() {
    @Override
    public void OnClick(int position) {
        if (position == 0) {
            //第一条
        } else if (position == 1) {
            //第二条
        }
    }
});
showPopRightTop.showPopupWindow(mRlShowPop); //是点击的按钮

查看评论

Android 自定义dialog,实现右上角显示一个控件按钮

这里是使用自定义view
  • BBLD_
  • BBLD_
  • 2014-05-26 12:15:39
  • 7251

popupwindow从屏幕右上角弹出

先看下效果图: 首先需要继承PopuWindow来自定义我们自己想要的结果,PopwinShare就是我们自定义的,代码如下 public class PopWinShare extends P...
  • u013122144
  • u013122144
  • 2016-01-06 10:06:01
  • 1676

Android开发学习(14)Popupwindow右上角弹出菜单

很多安卓app的右上角都有弹出菜单,今天我们继续丰富我们的计算机app,前几篇博客我们为他增加了历史记录的功能,今天我们使用Popupwindow做一个右上角弹出的按钮。 效果: 布局按钮主界面m...
  • xvshu
  • xvshu
  • 2017-08-21 15:07:29
  • 1110

Android-PopupWindow自定义的弹出框

PopupWindow自定义的弹出框的使用记录使用介绍 可实现弹出框的效果 这里是将PopupWindow添加到ActionBar下,通过点击标题上的图标显示 使用步骤 新建一个PopupWindow...
  • u014314614
  • u014314614
  • 2015-11-27 09:22:22
  • 1299

Android之PopupWindow类似微信右上角的弹出菜单

日常开发过程中对于PopupWindown的使用也是比较多的。这里给大家展示一下PopupWindow的使用。 修改activity_main.xml布局: ...
  • LoveYaozu
  • LoveYaozu
  • 2016-04-14 12:15:05
  • 7099

android popwindow仿微信右上角弹出框,dialog底部显示

仿微信右上角弹出框 1、利用popwindow实现 2、popwindow的位置居于右上角 新建,弹出popwindow: /** 弹popwindow **/ tv = (TextView) f...
  • u012885461
  • u012885461
  • 2015-05-07 19:32:26
  • 2989

仿微信右上角弹出PopupWindow

  • 2016年08月26日 17:55
  • 1.45MB
  • 下载

Android自定义PopWindow(QQ、微信弹出菜单)

前段时间在个人开发的项目中需要用到弹出菜单,类似QQ右上角的弹出菜单,自己使用popwin的次数也不是很多,其中也遇到过一点问题,今天正好有时间就把一些经验分享给大家。 先来看看最终实现过后的效...
  • caicdd007
  • caicdd007
  • 2016-07-17 18:44:19
  • 2695

Android微信右上角弹出的对话选择框实现

 Android微信右上角弹出的对话选择框实现 我在之前的文章中曾给出了一个开源的微信UI大体实现方案具体代码实现,参见附录文章1。本文单单挑出一个微信的UI实现点:微信右上角弹出的选择对...
  • zhangphil
  • zhangphil
  • 2016-01-08 11:26:26
  • 4817

PopupWindow实现android自定义弹出框口

android开发中我们要实现很多自定义的弹出窗口,我们可以使用PopupWindow来实现public class SelectDialog extends Activity implements ...
  • lixunjing
  • lixunjing
  • 2015-11-03 14:15:21
  • 827
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 668
    排名: 7万+
    文章分类
    最新评论