ViewPager+GridView

1.activity

public class MainActiviry extends Activity {


    @BindView(R.id.tv_jine)
    TextView tvJine;
    @BindView(R.id.tv_chongzhi)
    TextView tvChongzhi;
    @BindView(R.id.tv_fasong)
    TextView tvFasong;
    @BindView(R.id.vp_viewpager)
    ViewPager vpViewpager;
    @BindView(R.id.points)
    LinearLayout points;

    private float mLeftVolume;
    private float mRightVolume;
    private Context mContext;
    private MediaPlayer mBackgroundMediaPlayer;
    private boolean mIsPaused;
    private String mCurrentPath;

    private String token;
  
    private static final String TAG = "ChongzhiActivity";
    private static final int SDK_PAY_FLAG = 1;
    public static int item_grid_num = 4;//每一页中GridView中item的数量
    public static int number_columns = 4;//gridview一行展示的数目
    private MyViewPagerAdapter mAdapter;
    private List<DataBean1.DataBean> dataList = new ArrayList<DataBean1.DataBean>();
    private List<GridView> gridList = new ArrayList<>();
    private IWXAPI api;
    private String liwuid, liwuname, liwupic, zhuboid, jine, uuid;
    private int dianji;
    private MediaPlayer mediaPlayer;
    private String svgaliwu;
    private int mPageSize = 4; //每页显示的最大的数量
    private int totalPage; //总的页数
    private List<View> viewPagerList;
    private ArrayList<String> keylist = new ArrayList<String>();
    private ArrayList<String> viuelist = new ArrayList<String>();
    private String nicheng, touxiang;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //设置为true点击区域外消失
        setFinishOnTouchOutside(true);
        setContentView(R.layout.liwu_dialog);
        WindowManager m = getWindowManager();
        Display d = m.getDefaultDisplay(); // 为获取屏幕宽、高
        WindowManager.LayoutParams p = getWindow().getAttributes();
//        p.height = (int) (d.getHeight() * 0.6); // 高度设置为屏幕的0.3
//        p.width = (int) (d.getWidth() * 1); // 宽度设置为屏幕的0.7
//        WindowManager.LayoutParams p = getWindow().getAttributes();
        WindowManager.LayoutParams dialogParams = LiwuDlalogActivity.this.getWindow().getAttributes();
        dialogParams.width = WindowManager.LayoutParams.MATCH_PARENT;
        dialogParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
        //设置底部显示
        dialogParams.gravity = Gravity.BOTTOM;
        LiwuDlalogActivity.this.getWindow().setAttributes(dialogParams);
        getWindow().setAttributes(p);
        ButterKnife.bind(this);
        getWindow().setWindowAnimations(R.style.mystyle);//动画
        p.gravity = Gravity.BOTTOM;//设置对话框置顶显示
//        iniver();
        Intent intent = getIntent();
        zhuboid = intent.getStringExtra("id");
      
        if (token.length() > 8) {
            money();
        } else {
            tvJine.setText("未登录");
        }
        zhibo();
    }

    @OnClick({R.id.tv_chongzhi, R.id.tv_fasong})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.tv_chongzhi:
                if (!Check.isFastClick()) {
                    Toast.makeText(LiwuDlalogActivity.this,"请勿频繁点击",Toast.LENGTH_SHORT).show();
                    return;
                }
                //下面写点击事件逻辑

                Intent intent = new Intent(LiwuDlalogActivity.this, CHongzhi.class);
                startActivity(intent);
                break;
            case R.id.tv_fasong:
                if (!Check.isFastClick()) {
                    Toast.makeText(LiwuDlalogActivity.this,"请勿频繁点击",Toast.LENGTH_SHORT).show();
                    return;
                }
                //下面写点击事件逻辑

                if (liwuid==""||liwuid==null){
                    Toast.makeText(LiwuDlalogActivity.this,"请选择礼物",Toast.LENGTH_SHORT).show();
                }else {
                    paygift();
                }
                break;
        }
    }

  
    private void paygift() {
        SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
        token = sPreferences.getString("token", "");

        HashMap<String, String> hash = new HashMap<>();
        hash.put("giftId", giftId+ "");
        hash.put("anchorId", anchorId+ "");

        String str = new String();
        str = new Gson().toJson(hash);
        OkGo.<String>post(HttpUtils.url + "/tel/pay/giveGift").upJson(str).headers("authorization", token).execute(new StringCallback() {
            @Override
            public void onSuccess(Response<String> response) {
                SongLiWuModel confirm = new SongLiWuModel();
                confirm = new Gson().fromJson(response.body().toString(), SongLiWuModel.class);
//                zhinolist = confirm.getData();
                if (confirm.getCode() == 1) {
                    tvJine.setText(String.valueOf(confirm.getData().getBalance().setScale(2, RoundingMode.HALF_UP)));
                    Intent intent = getIntent();
                    Bundle bundle = new Bundle();
                    bundle.putString("name", liwuname);
                    bundle.putString("pic", liwupic);
                    bundle.putString("xianshi", "1");
                    intent.putExtras(bundle);
                    setResult(RESULT_OK, intent);
                    EventBus.getDefault().post(new SanEvent(svgaliwu));
                    Log.e("dong", svgaliwu + "");
                } else if (confirm.getCode() == 401) {
                    SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
                    SharedPreferences.Editor edit = sPreferences.edit();
                    edit.putString("userid", "");
                    edit.putString("token", "");
                    edit.putString("name", "");
                    edit.commit();
//                    finish();
                    ToastUtils.showToast("请重新登录");
                    startActivity(new Intent(MainActivity.this, LoginActivity.class));
 

              

            }
        });
    }

    private void getGiftList() {
        SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
        token = sPreferences.getString("token", "");
        uuid = sPreferences.getString("uuid", "");
        HashMap<String, String> hash = new HashMap<>();
        OkGo.<String>get(HttpUtils.url + "/tel/sys/giftList" + "?offset=1" + "&limit=20" + "&uuid=" + uuid).headers("authorization", token).execute(new StringCallback() {

            @Override
            public void onSuccess(Response<String> response) {
                DataBean1 confirm = new DataBean1();
                confirm = new Gson().fromJson(response.body().toString(), DataBean1.class);
             
                if (confirm.getCode() == 1) {
                    if (response.body().contains("暂无数据")){

                    }else {
                        dataList = confirm.getData();
                        totalPage = (int) Math.ceil(dataList.size() * 1.0 / mPageSize);
                        viewPagerList = new ArrayList<View>();

                        for (int i = 0; i < totalPage; i++) {
                            //每个页面都是inflate出一个新实例
                            final GridView gridView = (GridView) View.inflate(MainActivity.this, R.layout.item_viewpage, null);
                            gridView.setAdapter(new MyGridViewAdpter(MainActivity.this, dataList, i, mPageSize));
                            //添加item点击监听
                            gridView.setBackgroundResource(R.color.pickerview_timebtn_nor);
                            gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                                @Override
                                public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
                                    // TODO Auto-generated method stub
                                    String ss = arg0.getAdapter().getItem(position).toString();
                                    Log.w("ssss", ss);
                                    Object obj = gridView.getItemAtPosition(position);
                                    if (obj != null && obj instanceof DataBean1.DataBean) {
                                        System.out.println(((DataBean1.DataBean) obj).getGiftId());
//                                    liwuid=dataList.get(position).getGiftId();
//                                    Toast.makeText(LiwuDlalogActivity.this, ((DataBean1.DataBean) obj).getGiftId(), Toast.LENGTH_SHORT).show();
                                        for (int i = 0; i < arg0.getCount(); i++) {
                                            View v = arg0.getChildAt(i);
                                            arg0.setBackgroundResource(R.color.pickerview_timebtn_nor);
                                            if (position == i) {//当前选中的Item改变背景颜色
                                                v.setBackgroundResource(R.drawable.shape_hei1);
                                            } else {
                                                v.setBackgroundResource(R.drawable.shape_hei);
                                            }
                                        }

                                        Uri uri = Uri.parse(((DataBean1.DataBean) obj).getGiftVoice());
                                        if (mediaPlayer!=null) {
                                            mediaPlayer.stop();
                                            mediaPlayer.release();
                                            mediaPlayer = null;
                                        }
                                        if (mediaPlayer == null) {
                                            // R.raw.mmp是资源文件,MP3格式的

                                            mediaPlayer = MediaPlayer.create(LiwuDlalogActivity.this, uri);
                                            mediaPlayer.start();

                                            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                                                @Override
                                                public void onCompletion(MediaPlayer mp) {
                                                    mediaPlayer.stop();
                                                }
                                            });
                                        }
                                        pic = ((DataBean1.DataBean) obj).getGiftPicUrl();
                                        name = ((DataBean1.DataBean) obj).getGiftName();
                                        id = ((DataBean1.DataBean) obj).getGiftId();
                                        svga = ((DataBean1.DataBean) obj).getGiftSpecial();
                                    }
                                    Log.w("liwuid", ((DataBean1.DataBean) obj).getGiftId());
                                    Log.w("dong", ((DataBean1.DataBean) obj).getGiftSpecial() + "");
                                }
                            });
                            //每一个GridView作为一个View对象添加到ViewPager集合中
                            viewPagerList.add(gridView);
                        }
                        //设置ViewPager适配器
                        vpViewpager.setAdapter(new MyViewPagerAdapter(viewPagerList));
                    }
                } else if (confirm.getCode() == 401) {
                    SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
                    SharedPreferences.Editor edit = sPreferences.edit();
                    edit.putString("userid", "");
                    edit.putString("token", "");
                    edit.putString("name", "");
                    edit.commit();
                    finish();
                    ToastUtils.showToast("请重新登录");
                    startActivity(new Intent(LiwuDlalogActivity.this, LoginActivity.class));
                }
            }
        });
    }

    private void money() {
        SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
        token = sPreferences.getString("token", "");
        OkGo.<String>get(HttpUtils.url + "/tel/userInfo/myWallet").headers("authorization", token).execute(new StringCallback() {

            @Override
            public void onSuccess(Response<String> response) {
                NewQianBaoMdel confirm = new NewQianBaoMdel();
                confirm = new Gson().fromJson(response.body().toString(), NewQianBaoMdel.class);
                if (confirm.getCode() == 1) {
                    jine = String.valueOf(confirm.getData().getBalance().setScale(2, RoundingMode.HALF_UP));
                    tvJine.setText(jine + "");
                } else if (confirm.getCode() == 401) {

                    tvJine.setText("暂未登录");
                  
                } else {
                    ToastUtils.showToast(confirm.getMsg());
                }
            }
        });
    }

    @Override
    protected void onRestart() {
        super.onRestart();

    }

    @Override
    protected void onResume() {
        super.onResume();
  
    }

    @Override
    protected void onPause() {
        super.onPause();
        finish();
    }

    @Override
    protected void onStop() {
        super.onStop();
        finish();
    }

   

    @Override
    public void onDestroy() {
// TODO Auto-generated method stub
        super.onDestroy();
        if (mediaPlayer!=null) {
            mediaPlayer.stop();
            mediaPlayer.release();
            mediaPlayer = null;
        }
    }


2.adapter

public class MyViewPagerAdapter extends PagerAdapter {

    private List<View> viewList;//View就二十GridView


    public MyViewPagerAdapter(List<View> viewList) {
        this.viewList = viewList;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return viewList!=null ? viewList.size() : 0;
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        // TODO Auto-generated method stub
        return arg0 == arg1;
    }
    /**
     * 将当前的View添加到ViewGroup容器中
     * 这个方法,return一个对象,这个对象表明了PagerAdapter适配器选择哪个对象放在当前的ViewPage上
     */
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // TODO Auto-generated method stub
        container.addView(viewList.get(position));
        return viewList.get(position);
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // TODO Auto-generated method stub
        container.removeView((View) object);
    }
}
public class MyGridViewAdpter extends BaseAdapter {
    private String liwuid, liwuname, liwupic, zhuboid, jine;
    private int dianji;
    private int defItem;
    private Context context;
    private List<DataBean1.DataBean> lists; //数据源
    private int mIndex; // 页数下标,标示第几页,从0开始
    private int mPargerSize; // 每页显示的最大的数量
    public MyGridViewAdpter(Context context, List < DataBean1.DataBean > lists, int mIndex, int mPargerSize) {
        this.context = context;
        this.lists = lists;
        this.mIndex = mIndex;
        this.mPargerSize = mPargerSize;
    }

    /**
     * 先判断数据及的大小是否显示满本页lists.size() > (mIndex + 1)*mPagerSize
     * 如果满足,则此页就显示最大数量lists的个数
     * 如果不够显示每页的最大数量,那么剩下几个就显示几个
     */
    @Override public int getCount() {
        // TODO Auto-generated method stub
        return lists.size() > (mIndex + 1) * mPargerSize ? mPargerSize: (lists.size() - mIndex * mPargerSize);
    }

    @Override public DataBean1.DataBean getItem(int arg0) {
        // TODO Auto-generated method stub
        return lists.get(arg0 + mIndex * mPargerSize);
    }

    @Override public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return arg0 + mIndex * mPargerSize;
    }
    public void setDefSelect(int position) {
        this.defItem = position;
        notifyDataSetChanged();
    }
    public View getView(int i, View itemView, ViewGroup viewGroup) {
       ViewHolder mHolder;
        if (itemView == null) {
            mHolder = new ViewHolder();
            itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_liwu, viewGroup, false);
            mHolder.iv_img = (ImageView) itemView.findViewById(R.id.iv_liwu_list);
            mHolder.tv_text = (TextView) itemView.findViewById(R.id.tv_liwu_mingcheng_list);
            mHolder.money = (TextView) itemView.findViewById(R.id.tv_liwu_jine_list);
            mHolder.liwu = (LinearLayout) itemView.findViewById(R.id.ll_liwuid);
            itemView.setTag(mHolder);
        } else {
            mHolder = (ViewHolder) itemView.getTag();
        }

        liwuname = lists.get(i).getGiftName();
        liwupic = lists.get(i).getGiftPicUrl();
        int pos=i+mIndex*mPargerSize;
        if (lists.get(i) != null) {
            Picasso
                    .with(context)
                    .load(lists.get(pos).getGiftPicUrl())
                    .into(mHolder.iv_img);
            mHolder.tv_text.setText(lists.get(pos).getGiftName());
//            if (lists.get(pos).getGiftPrice() == 0) {
//                if (lists.get(pos).getFreeCountHaving() == 2) {
//                    mHolder.money.setText("已送完");
//                } else if (lists.get(pos).getFreeCountHaving() == 1) {
//                    mHolder.money.setText("赠送1次");
//                } else if (lists.get(pos).getFreeCountHaving() == 0) {
//                    mHolder.money.setText("赠送2次");
//                }
//            } else {
//                mHolder.money.setText(lists.get(pos).getGiftPrice() + "小熊币");
//            }
//            Log.w("liwu", "1111");
        }
        return itemView;
    }

    private class ViewHolder {
        private ImageView iv_img;
        private TextView tv_text;
        private TextView money;
        private LinearLayout liwu;
    }

}

3..自定义控件

public class WrapContentHeightViewPager extends ViewPager {
    public WrapContentHeightViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        // find the current child view
        // and you must cache all the child view
        // use setOffscreenPageLimit(adapter.getCount())
        View view = getChildAt(getCurrentItem());
        if (view != null) {
            // measure the current child view with the specified measure spec
            view.measure(widthMeasureSpec, heightMeasureSpec);
        }

        setMeasuredDimension(getMeasuredWidth(), measureHeight(heightMeasureSpec, view));
    }

    /**
     * Determines the height of this view
     *
     * @param measureSpec A measureSpec packed into an int
     * @param view the base view with already measured height
     *
     * @return The height of the view, honoring constraints from measureSpec
     */
    private int measureHeight(int measureSpec, View view) {
        int result = 0;
        int specMode = MeasureSpec.getMode(measureSpec);
        int specSize = MeasureSpec.getSize(measureSpec);

        if (specMode == MeasureSpec.EXACTLY) {
            result = specSize;
        } else {
            // set the height from the base view if available
            if (view != null) {
                result = view.getMeasuredHeight();
            }
            if (specMode == MeasureSpec.AT_MOST) {
                result = Math.min(result, specSize);
            }
        }
        return result;
    }

    /**
     * 單獨測量view獲取尺寸
     *
     * @param view
     */
    public void measeureView(View view) {

        int intw = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
        int inth = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
        // 重新測量view
        view.measure(intw, inth);

        // 以上3句可簡寫成下面一句
        //view.measure(0,0);

        // 獲取測量後的view尺寸
        int intwidth = view.getMeasuredWidth();
        int intheight = view.getMeasuredHeight();
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PageGridViewViewPager GridView组合控件实现网格布局分页效果大多数app首页界面一般貌似可以滑动切换上下页的网格布局,这种效果用得挺多,可惜Android原生是没有这样的控件的。在工作中,我也用到过几次。但每次实现都是按ctrl A C V,代码写得也不优雅,就是再次重新复制粘贴,也避免不了看上几眼,修改修改,特别不爽快。每次吐槽的同时在想,下次我要再用到这种效果,我就将这些代码关进小黑屋。拒绝再写重复代码,虽然大多数只是按ctrl A C V。这次,我终于要将自己吐槽时的想法付之行动的。再写之前,为了避免重复造轮子。在网上搜了好多次,嗯,没有意外,我还是没有发现到惊喜。那就开始行动了。这种效果用ViewPager GridView实现,那我就叫它PageGridView吧(其实名字我也想了好久)有用的话,star一下也是不错的!!!PageGridView 特点可自由定制Item布局无需写adapter适配器,直接调用setData()方法填充数据只需实体类继承ItemModel即可可显示本地图、网络图、资源ID图标,由开发者实现动态计算PageGridView高度,不需要在布局里面写固定高度可重复setData()方法刷新数据PageGridView自定义属性属性名说明默认值pageSize每页大小8numColumns列数4isShowIndicator是否显示指示器trueselectedIndicator选中指示点资源IDR.mipmap.ic_dot_selectedunSelectedIndicator未选中指示点资源IDR.mipmap.ic_dot_normalindicatorGravity指示器位置centerindicatorPaddingLeft指示器左内边距0pxindicatorPaddingRight指示器右内边距0pxindicatorPaddingTop指示器上内边距0pxindicatorPaddingBottom指示器下内边距0pxindicatorPadding指示器内边距0pxindicatorBackground指示器背景颜色Color.WHITEitemViewItem布局R.layout.item_view约定规则Item布局必须给定具体高度,默认itemView布局的高度为@dimen/item_height=80dpItem布局 TextView的id 为R.id.tv_item_nameItem布局 ImageView的id 为R.id.iv_item_iconItem默认点击效果R.drawable.selector_item_view_bgItem点击颜色值:R.color.item_view_selected_colorItem背景颜色值:R.color.item_view_normal_color一行四列效果图两行四列效果图自定义Item布局效果图PageGridView使用Gradle 依赖库implementation 'com.wihaohao:PageGridView:1.0.1'默认布局一般默认参数即可满足需求<com.wihaohao.PageGridView           android:id="@ id/vp_grid_view"           android:layout_width="match_parent"           android:layout_height="wrap_content"           />一行4列的布局  <com.wihaohao.PageGridView           android:id="@ id/vp_grid_view"           android:layout_width="match_parent"           android:layout_height="wrap_content"           app:numColumns="4"           app:pageSize="4"           app:selectedIndicator="@mipmap/ic_dot_selected"           app:unSelectedIndicator="@mipmap/ic_dot_normal"           app:isShowIndicator="true"           />两行4列的布局    <com.wihaohao.PageGridView         android:id="@ id/vp_grid_view"         android:layout_width="match_parent"         android:layout_height="wrap_content"         app:indicatorPadding="10dp"         app:isShowIndicator="true"         app:itemView="@layout/my_item_view"         app:numColumns="4"         app:pageSize="8"         app:selectedIndicator="@mipmap/ic_dot_selected"         app:unSelectedIndicator="@mipmap/ic_dot_normal" />自定义Item布局 <com.wihaohao.PageGridView                 android:id="@ id/p_grid_view2"         android:layout_width="match_parent"         android:layout_height="wrap_content"         app:indicatorGravity="right"         app:indicatorPaddingRight="@dimen/padding_10"         app:isShowIndicator="true"         app:itemView="@layout/item_custom"         app:indicatorBackground="@color/colorPrimary"         app:numColumns="5"         app:pageSize="5"/>ItemModelpublic abstract static class ItemModel {                 /**                  * 返回item名字                  *                  * @return                  */         protected abstract String getItemName();         /**                  * 设置图标                  *                  * @param imageView         */         protected abstract void setIcon(ImageView imageView);          /**                  * 特殊需求,重写该方法,设置item                  *                  * @param itemView                  */         protected void setItemView(View itemView) {         }     }Model继承VpGridView.ItemModel 为item赋值和设置图标public abstract static class ItemModel {                 /**                  * 返回item名字                  *                  * @return         */         protected abstract String getItemName();                 /**                  * 设置图标                  *                  * @param imageView                  */         protected abstract void setIcon(ImageView imageView);                 /**                  * 特殊需求,重写该方法,设置item                  *                  * @param itemView                  */         protected void setItemView(View itemView) {         }     }继承VpGridView.ItemModel 设置ItemViewpublic class MyIconModel extends PageGridView.ItemModel {     private String name;         private int iconId;         public String getName() {             return name;     }         public void setName(String name) {             this.name = name;     }         public int getIconId() {             return iconId;     }         public void setIconId(int iconId) {             this.iconId = iconId;     }         public MyIconModel(String name, int iconId) {             this.name = name;             this.iconId = iconId;     }         @Override     protected String getItemName() {             return name;     }         @Override     protected void setIcon(ImageView imageView) {         imageView.setImageResource(iconId);     } }PageGridView的使用public class MainActivity extends AppCompatActivity {     List<MyIconModel> mList;         List<CustomModel> mList2;         private PageGridView<MyIconModel> mPageGridView;         private PageGridView<CustomModel> mPageGridView2;         @Override     protected void onCreate(Bundle savedInstanceState) {                 super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         mPageGridView =findViewById(R.id.vp_grid_view);         initData();         mPageGridView.setData(mList);         mPageGridView.setOnItemClickListener(new PageGridView.OnItemClickListener() {            @Override             public void onItemClick(int position) {                Toast.makeText(MainActivity.this,position "",Toast.LENGTH_SHORT).show();             }         });        //自定义item         mPageGridView2=findViewById(R.id.p_grid_view2);         mPageGridView2.setData(mList2);     }         private void initData() {         mList=new ArrayList<>();         mList2=new ArrayList<>();                 for(int i=0;i<30;i ){             mList.add(new MyIconModel("测试" i,R.mipmap.ic_launcher));             mList2.add(new CustomModel("标题" i));         }     } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值