安卓开发-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
- 安卓开发-RecyclerView添加头(轮播图)
- 安卓开发GridView添加头布局和
- RecyclerView添加头布局
- Recyclerview添加头布局
- RecyclerView头布局添加
- RecyclerView添加头布局
- 安卓开发 RecyclerView的点击事件
- 安卓开发中Banner添加头布局结合PullToRefresh实现上拉下拉
- 安卓Recyclerview
- 安卓学习---RecyclerView
- 安卓 RecyclerView
- 安卓开发之添加背景图
- 安卓高级3 RecyclerView结合SwipeRefreshLayout并添加上拉
- 安卓的Recyclerview,CradView
- 安卓RecyclerView使用教程
- 安卓RecyclerView的用法
- 添加头、尾和动画的下拉刷新RecyclerView
- 为RecyclerView添加头视图和尾视图
- jenkins设置smtp发送邮件通知
- view-基本属性
- cloudtack基本概念入门
- WebMagic-使用入门
- Mac 键盘快捷键
- 安卓开发-RecyclerView添加头(轮播图)
- 我的第一篇文章
- 20个很棒的android开源项目帮助你提升开发技能
- Gson的使用(1)
- docker修改image名字
- 【matlab】solve 与 fsolve 的用法及个人的一点思考
- SharePoint 2016 如何搜索外网内容
- C#开发人员应该知道的13件事情
- python strip()