安卓开发-RecyclerView添加头(轮播图)

来源:互联网 发布:公交数据接口 编辑:程序博客网 时间:2024/05/16 14:16

安卓开发-RecyclerView添加头(轮播图)

需求

 在开发中很流行的一种界面:    在列表上面添加一个轮播图,但是两个布局写一起时,上下滑动recyclerView时,轮播图是不会动的,    我们需要的是向上滑动时,轮播图开始隐藏让出位置显示recyclerview的内容.

实现

①: 在布局中写一个recyclerview即可:<?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="match_parent"          android:orientation="vertical">    <android.support.v7.widget.RecyclerView        android:id="@+id/home_rv"        android:layout_width="match_parent"        android:layout_height="wrap_content">    </android.support.v7.widget.RecyclerView></LinearLayout>②: 设置recyclerview:private void initRecyclerView(HomeViewPager homeBean) {    HomeItemAdapter adapter = new HomeItemAdapter(getContext(),homeBean);    homeRv.setLayoutManager(new LinearLayoutManager(getContext()));    homeRv.setAdapter(adapter);}③:adapter处理:首先重写getItemViewType()@Overridepublic int getItemViewType(int position) {    if (position == 0) {        //将第一条改为头布局        return TYPE_HEADER;    } else {        return TYPE_ITEM;    }}④: adapter数据:public class HomeItemAdapter extends RecyclerView.Adapter {    private static final int TYPE_HEADER = 0;    private static final int TYPE_ITEM = 1;    private Context context;    private HomeViewPager homeBean;    private List<ImageView> imageViews;    private int[] images = {R.drawable.home_classify_01            , R.drawable.home_classify_02            , R.drawable.home_classify_03            , R.drawable.home_classify_04            , R.drawable.home_classify_05};    private String[] items = {"限时抢购"            , "促销快报"            , "新品上架"            , "热门单品"            , "推荐品牌"};    private HomeItemAdapter.vpViewHolder vpViewHolder;    public HomeItemAdapter(Context context, HomeViewPager homeBean) {        this.context = context;        this.homeBean = homeBean;    }    @Override    public int getItemCount() {        //rectclerview的数目为正常条目数量+1(多了一个不是item条目数量之内的头布局)        return images.length + 1;    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        //Log.i("jx", "viewType : " + viewType);        //根据getItemViewType()的返回值,确定需要加载什么布局        View view = null;        if (viewType == TYPE_HEADER) {            //加载头布局            view = View.inflate(context, R.layout.activity_home_item_hander, null);            vpViewHolder viewHolder = new vpViewHolder(view);            return viewHolder;        } else if (viewType == TYPE_ITEM) {            //加载条目布局            view = View.inflate(context, R.layout.activity_home_item, null);            ViewHolder viewHolder = new ViewHolder(view);            return viewHolder;        }        return null;    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, int    position) {        //根据holder类型添加数据        if (holder instanceof ViewHolder) {            //因为条目中的第一条被加载为了头布局,所以item条目需要前移一位(否则会出现下标越界)            final int thisPosition = position - 1;            //加载item布局数据                ViewHolder viewHolder = (ViewHolder) holder;            viewHolder.ivIcon.setImageResource(images[thisPosition]);            viewHolder.tvContent.setText(items[thisPosition]);            viewHolder.itemView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                //MyToast.show(context,"position" + position);                    Intent intent = new Intent(context, EntryActivity.class);                    intent.putExtra("state", thisPosition);                    intent.putExtra("title", items[thisPosition]);                    context.startActivity(intent);                }            });        } else if (holder instanceof vpViewHolder) {            //加载头布局数据            vpViewHolder = (HomeItemAdapter.vpViewHolder) holder;            initViewPager(homeBean);        }    }    //头布局的holder,(布局末尾帖上)    static class vpViewHolder extends RecyclerView.ViewHolder {        @InjectView(R.id.home_pic_vp)        ViewPager homePicVp;        @InjectView(R.id.home_ll)        LinearLayout homeLl;        vpViewHolder(View view) {            super(view);            ButterKnife.inject(this, view);        }    }    //条目布局的holder(正常条目布局)    static class ViewHolder extends RecyclerView.ViewHolder {        @InjectView(R.id.iv_icon)        ImageView ivIcon;        @InjectView(R.id.tv_content)        TextView tvContent;        @InjectView(R.id.iv_next)        ImageView ivNext;        ViewHolder(View view) {            super(view);            ButterKnife.inject(this, view);        }    }    //加载头布局的viewpager    private void initViewPager(HomeViewPager homeBean) {        imageViews = new ArrayList<>();        for (int i = 0; i < homeBean.getHomeTopic().size(); i++) {            ImageView imageView = new ImageView(context);            String pic = homeBean.getHomeTopic().get(i).getPic();            String picUrl = Constants.FFURL + pic;            Picasso.with(context).load(picUrl).into(imageView);            imageViews.add(imageView);        }        HomePicAdapter homePicAdapter = new HomePicAdapter(context, imageViews);        vpViewHolder.homePicVp.setAdapter(homePicAdapter);        initPoint();        }    //viewpager中指向每个条目的点    private void initPoint() {        for (int i = 0; i < imageViews.size(); i++) {            View view = new View(context);            view.setBackgroundResource(R.drawable.point_gray_bg);            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(7, 7);            params.rightMargin = 10;            vpViewHolder.homeLl.addView(view, params);        }        vpViewHolder.homeLl.getChildAt(0).setBackgroundResource(R.drawable.point_red_bg);    }}//viewpager头布局的布局<?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">    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="180dip">        <android.support.v4.view.ViewPager            android:id="@+id/home_pic_vp"            android:layout_width="match_parent"            android:layout_height="180dip">        </android.support.v4.view.ViewPager>        <LinearLayout            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginBottom="10dip"            android:layout_centerInParent="true"            android:layout_alignParentBottom="true"            android:orientation="horizontal"            android:id="@+id/home_ll">        </LinearLayout>    </RelativeLayout></LinearLayout>
0 0
原创粉丝点击