自定义下拉弹框

    首先自定义PopupWindow,主要是个listView。

public SpinerPopWindow(Context context, List<T> list, OnItemClickListener clickListener) {
        super(context);
        inflater = LayoutInflater.from(context);
        this.list = list;
        init(clickListener);
    }

private void init(OnItemClickListener clickListener) {
        View view = inflater.inflate(R.layout.spiner_window_layout, null);
        setContentView(view);
        setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
        setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        setFocusable(true);
        ColorDrawable dw = new ColorDrawable(0x00);
        setBackgroundDrawable(dw);
        mListView = (ListView) view.findViewById(R.id.listview);
        mListView.setAdapter(mAdapter = new MyAdapter());
        mListView.setOnItemClickListener(clickListener);
    }

下面是适配器定义:

private class MyAdapter extends BaseAdapter {
        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            return list.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = inflater.inflate(R.layout.item_single_text, null);
                holder.tvName = (TextView) convertView.findViewById(R.id.content);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.tvName.setText(getItem(position).toString());
            return convertView;
        }
    }

    private class ViewHolder {
        private TextView tvName;
    }

然后初始化PopSpinner,其中,

       type1是一个TextView,用来显示当前选中的条目文本。当点击Pop条目时,更新文本内容。

       arrow1是一个ImageView,展示箭头图片。当显示Pop时,让图片旋转180度。

 mSpinerPopWindow1 = new SpinerPopWindow<String>(this, datas1, new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                mSpinerPopWindow1.dismiss();
                if(position >= 0 && position < datas1.size()){
                    type1.setText(datas1.get(position));
                }
            }
        });
        mSpinerPopWindow1.setOnDismissListener(new PopupWindow.OnDismissListener() {
            @Override
            public void onDismiss() {
                arrow1.startAnimation(AnimationUtil.rotateView(180, 0));
            }
        });

别忘记初始化数据:

 //设置Spinner数据源
    private void setSpinnerData(){
        datas1.clear();

        datas1.add("全部");
        datas1.add("已取消");
        datas1.add("待发货");
        datas1.add("已发货");

        if(mSpinerPopWindow1 != null){
            mSpinerPopWindow1.notifyDataChanged();
        }

    }

最后调用显示PopSpinner:

 //显示PopWindow1
    private void showPop1(){
        if(mSpinerPopWindow1 == null){
            return;
        }
        mSpinerPopWindow1.setWidth(rlLayout1.getWidth());
        mSpinerPopWindow1.showAsDropDown(rlLayout1);
        arrow1.startAnimation(AnimationUtil.rotateView(0, 180));
    }

运行效果:

 

需要源码的小伙伴可以底部留言,谢谢配合~

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值