我相信很久以前,大家在谈横向图片轮播是时候,优先会选择具有HorizontalScrollView效果和ViewPager来做,不过自从Google大会之后,系统为我们提供了另一个控件RecyclerView。RecyclerView是listview之后的又一利器,它可以实现高度的定制。今天就利用RecyclerView实现我们需要的相册效果。

先上一个图:

主要实现就是一个RecyclerView+RecyclerView.Adapter实现。

Activity的布局文件:

<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:scrollbars="none" />

我这里是自定义的控件,主要代码:

public class SimpleLinearLayout extends LinearLayout {  

    protected Context mContext;
protected View contentView;
protected AtomicBoolean isPreparingData; public SimpleLinearLayout(Context context) {
super(context);
this.mContext = context;
isPreparingData = new AtomicBoolean(false);
initViews();
} public SimpleLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
isPreparingData = new AtomicBoolean(false);
initViews();
}
protected void initViews() { }
}

主页面代码:

public class SpeedHourView extends SimpleLinearLayout {  

    @BindView(R.id.recycler_view)
RecyclerView recyclerView; private SpeedHourAdapter speedHourAdapter=null;
private SpeedHourEntity entity=null; public SpeedHourView(Context context) {
this(context, null);
} public SpeedHourView(Context context, AttributeSet attrs) {
super(context, attrs);
} @Override
protected void initViews() {
contentView = inflate(mContext, R.layout.layout_speed_per_hour, this);
ButterKnife.bind(this);
init();
} private void init() {
initData();
initView();
initAdapter();
} private void initData() {
String data = FileUtils.readAssert(mContext, "speenhour.txt");
entity = JsonUtils.parseJson(data, SpeedHourEntity.class);
} private void initView() {
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
recyclerView.setLayoutManager(linearLayoutManager); } private void initAdapter() {
speedHourAdapter=new SpeedHourAdapter(mContext);
recyclerView.setAdapter(speedHourAdapter);
if (entity!=null&&entity.topic!=null&&entity.topic.items!=null&&entity.topic.items.size()>){
List<SpeedHourEntity.TopicBean.ItemsBean.ListBean> listBeen=entity.topic.items.get().list;
if (listBeen!=null&&listBeen.size()>)
speedHourAdapter.setList(listBeen);
} speedHourAdapter.setOnItemClickListener(new SpeedHourAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
ProductDetailsActivity.open(mContext);
}
});
} @OnClick(R.id.more_view)
public void moreClick() {
ToastUtils.showToast("更多时速达");
}
}

adapter布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/speed_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp"
android:gravity="center"> <ImageView
android:id="@+id/speed_image"
android:layout_width="85dp"
android:layout_height="85dp"
android:scaleType="fitXY"
/> <TextView
android:id="@+id/speed_name"
style="@style/style_c6_s14"
android:layout_marginTop="5dp"
android:text="蜂蜜柚子茶"
android:maxLines=""/> <TextView
android:id="@+id/speed_price"
style="@style/style_c8_s14"
android:layout_marginTop="5dp"
android:text="¥30.0"
android:maxLength=""
android:maxLines=""/>
</LinearLayout>

adapter代码:

public class SpeedHourAdapter extends RecyclerView.Adapter<SpeedHourHolder> {  

    private List<ListBean> specailList;
private LayoutInflater mInflater;
private Context mContext=null; public SpeedHourAdapter(Context context) {
this.mContext=context;
mInflater = LayoutInflater.from(context);
} public void setList(List<ListBean> list) {
this.specailList = list;
notifyDataSetChanged();
} public OnItemClickListener mOnItemClickListener; public interface OnItemClickListener {
void onItemClick(View view, int position);
} public void setOnItemClickListener(OnItemClickListener mOnItemClickLitener) {
this.mOnItemClickListener = mOnItemClickLitener;
} @Override
public SpeedHourHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.item_speedhour_layout, parent, false); SpeedHourHolder holder = new SpeedHourHolder(view);
return holder;
} @Override
public void onBindViewHolder(final SpeedHourHolder holder, final int position) {
ListBean bean = specailList.get(position);
if (bean != null) {
holder.speedImage.setScaleType(ImageView.ScaleType.FIT_XY);
Glide.with(mContext).load(bean.pic).error(R.drawable.welfare_default_icon).into(holder.speedImage);
holder.speedName.setText("同仁堂枸杞茶");
holder.speedPrice.setText("¥"+Math.random()*);
} holder.speedView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mOnItemClickListener!=null){
mOnItemClickListener.onItemClick(holder.speedView,position);
}
}
});
} @Override
public int getItemCount() {
return specailList.size();
}
} class SpeedHourHolder extends RecyclerView.ViewHolder { @BindView(R.id.speed_view)
LinearLayout speedView;
@BindView(R.id.speed_image)
ImageView speedImage;
@BindView(R.id.speed_name)
TextView speedName;
@BindView(R.id.speed_price)
TextView speedPrice; public SpeedHourHolder(View itemView) {
super(itemView);
ButterKnife.bind(this,itemView);
itemView.setTag(this);
}

代码中用到的实体类:

public class SpeedHourEntity {  

    public TopicBean topic;  

    public static class TopicBean {
public long nextupdatetime;
public List<ItemsBean> items; public static class ItemsBean {
public int id;
public String theme;
public int products;
public int users;
public String href;
public boolean follow;
public int topictype; public List<ListBean> list; public static class ListBean {
public String id;
public int price;
public String pic;
}
}
}
}

Android RecyclerView实现横向滚动的更多相关文章

  1. RecyclerView 实现横向滚动效果

    我相信很久以前,大家在谈横向图片轮播是时候,优先会选择具有HorizontalScrollView效果和ViewPager来做,不过自从Google大会之后,系统为我们提供了另一个控件Recycler ...

  2. Android简易实战教程--第四十六话《RecyclerView竖向和横向滚动》

    Android5.X后,引入了RecyclerView,这个控件使用起来非常的方便,不但可以完成listView的效果,而且还可以实现ListView无法实现的效果.当然,在新能方便也做了大大的提高. ...

  3. 【Android】10.5 滚动视图(RecyclerView)

    分类:C#.Android.VS2015: 创建日期:2016-02-19 一.简介 滚动视图(RecyclerView)的用法与布局控件的用法类似,唯一不同的是,所有布局控件中都可以包含多个组件,而 ...

  4. Android RecyclerView 滚动到中间位置

    最近看到QQ音乐的歌词每次滑动后都可以滚回到中间位置.觉得甚是神奇,打开开发者模式显示布局,发现歌词部分不是采用 android 控件的写的,应该是前端写的.于是,我想,能不能用 recyclerVi ...

  5. Android 横向列表GridView 实现横向滚动

    Android 横向列表实现,可左右滑动,如下图 1.主界面布局代码:activity_main.xml a.包裹HorizontalScrollView控件是GirdView横向滚动的基本条件b.G ...

  6. Android TextView 横向滚动(跑马灯效果)

    Android TextView 中当文字比較多时希望它横向滚动显示,以下是一种亲測可行的方法. 效果图: 1.自己定义TextView,重写isFocused()方法返回true,让自己定义Text ...

  7. Android RecyclerView 使用完全解析 体验艺术般的控件

    概述 RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进行使用. 据官方的介绍,该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我 ...

  8. Android RecyclerView 使用完全解析

    概述 RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进行使用. 据官方的介绍,该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我 ...

  9. 【转载】Android RecyclerView 使用完全解析 体验艺术般的控件

    崇拜下鸿洋大神,原文地址:http://blog.csdn.net/lmj623565791/article/details/45059587 概述 RecyclerView出现已经有一段时间了,相信 ...

随机推荐

  1. Hive分区表与分桶

    分区表 在Hive Select查询中.通常会扫描整个表内容,会消耗非常多时间做不是必需的工作. 分区表指的是在创建表时,指定partition的分区空间. 分区语法 create table tab ...

  2. python-Pymyslql-requests_html:把腾讯新闻的今日推荐和链接存进数据库

    使用pumsql封装的部分功能 request_html:打开www.qq.com的例子 结果: PS:记得处理数据

  3. 闲来无事爬了下通讯录 试手 jsdom

    curl http://xxx.com/address/addresslist\?search\=%40 --cookie oa_cookie=123 -s| node parss .js js 代码 ...

  4. ffmpeg在android上输出滑屏问题处理

    ffmpeg部分机器上有花屏的问题 原代码例如以下: while(av_read_frame(formatCtx, &packet)>=0 && !_stop & ...

  5. Linux内核编译測试

    内核编译: Step 1:配置内核编译选项. make menuconfig Optional Step :排除编译结果文件(.o)等之间的依赖性. make mrproper Optional St ...

  6. bzoj3262: 陌上花开(cdq分治+树状数组)

    3262: 陌上花开 题目:传送门 题解: %%%cdq分治 很强大的一个暴力...感觉比分块高级多了 这道题目就是一个十分经典的三维偏序的例题: 一维直接暴力排序x 二维用csq维护y 三维用树状数 ...

  7. Linux就该这么学 20181005(第九章SSH远程对话)

    参考链接https://www.linuxprobe.com/ nmtui开启网卡设置 ONBOOT=yes systemctl restart network nmcli connection sh ...

  8. BZOJ 2005 容斥原理

    思路: 题目让求的是 Σgcd(i,j) (i<=n,j<=m) n,m不同 没法线性筛 怎么办? 容斥原理!! f[x]表示gcd(i,j)=x的个数 g[x]为 存在公约数=x 的数对 ...

  9. jQuery学习(一)——jQuery入门

    1.jQuery基础 Jquery它是一个库(框架),要想使用它,必须先引入! jquery-1.8.3.js:一般用于学习阶段. jquery-1.8.3.min.js:用于项目使用阶段 官网下载后 ...

  10. hadoop 编译自己的jar包并运行

    我修从网上找了份java代码 我为了让它在hadoop下跑起来居然花了两个多小时... 首先最好不要在java代码中设置package...使用default package即可... 然后在java ...