前言

公司新项目首页有个类似京东/淘宝滚动广告条,查了一下大概都是两种实现方式,一是textview,如果只有文字的话是可行的,但我们这个上面还有个小图片,所以pass;二是两个viewGroup,使用动画交替滚动,可以实现,就是显得很麻烦,于是偷懒的我就想着用recyclerView来解决这个小问题!
思路
这个滚动广告条高度通常是固定的,用一个固定高度的viewGroup来包裹一个recyclerView,recylerView的item布局设置一个minHeight为viewGroup的高度,这样刚好能看到一个完整的item,然后使用recyclerView自带的方法 smoothScrollBy()来滚动recyclerView;他需要两个参数,x轴的滚动距离和y轴的滚动距离,我们是上下滚动,所以x轴传入1就好啦!y轴距离传入你的item高度,然后使用handler写一个循环任务就可以实现一直滚动啦!
/**
* Animate a scroll by the given amount of pixels along either axis.
*
* @param dx Pixels to scroll horizontally
* @param dy Pixels to scroll vertically
*/
public void smoothScrollBy(int dx, int dy) {
smoothScrollBy(dx, dy, null);
}
遇到的问题
写好之后发现这个控件是不能够触摸滑动的,但是又需要点击事件。想了想如果在onTouchEvent之类的方法中处理的话很麻烦,还不能保证完全禁止一点点都不能滑,所以就又想了个偷懒的办法。给recyclerView上加一层透明的蒙板,彻底禁用掉recyclerView的touch事件,给蒙板设置点击事件……下面是代码
布局:
<?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="60dp"
android:background="@color/colorWhite"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="18dp"
android:gravity="center"
android:text="养车\n宝典"
android:textColor="@color/colorTitle"
android:textSize="12sp"/>
<View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:layout_marginBottom="12dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="12dp"
android:background="@color/colorTitle"/>
<!--禁用了recyclerView的触摸事件,他的点击事件交由一个透明的蒙版来实现-->
<RelativeLayout
android:layout_marginLeft="6dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.xinshiwi.mycar.view.AutoScrollRecyclerView
android:id="@+id/rv_home_maintain"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<View
android:id="@+id/view_home_maintain"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"/>
</RelativeLayout>
</LinearLayout>
Adapter:
public class MaintainInfoAdapter extends RecyclerView.Adapter<MaintainInfoAdapter.MyViewHolder> {
List<String> list;
public MaintainInfoAdapter(List<String> list) {
this.list = list;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home_maintain, null);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tv.setText(list.get(position % 4));
}
@Override
public int getItemCount() {
return Integer.MAX_VALUE;
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
public TextView tv;
public MyViewHolder(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.tv_maintain);
}
}
}
设置recyclerView:
/**
* 滚动养车宝典
*/
private void initMaintainData() {
mList = new ArrayList<>();
mList.add("如何做好队汽车的轮胎养护0");
mList.add("如何做好队汽车的轮胎养护1");
mList.add("如何做好队汽车的轮胎养护2");
mList.add("如何做好队汽车的轮胎养护3");
mRvHomeMaintain.setLayoutManager(new LinearLayoutManager(mActivity));
mAdapter = new MaintainInfoAdapter(mList);
mRvHomeMaintain.setAdapter(mAdapter);
Message msg = new Message();
msg.what = MAINTAIN_INFO;
sHandler.sendMessageDelayed(msg, 3000);
//通过一个透明的蒙板来设置点击事件
mViewHomeMaintain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mActivity, "pos % 4:" + (pos % 4), Toast.LENGTH_SHORT).show();
}
});
}
//当前显示的item
private int pos = 0;
private Handler sHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case MAINTAIN_INFO:
mRvHomeMaintain.smoothScrollBy(0, SizeUtils.dp2px(60));
pos++;
Message message = new Message();
message.what = MAINTAIN_INFO;
sHandler.removeMessages(MAINTAIN_INFO);
sHandler.sendMessageDelayed(message, 3000);
break;
}
}
};
只是一个小demo,很多细节没太考虑……有什么问题还望大佬们指出,不胜感激,也希望大家多多支持。
# android滚动广告条
# recyclerview
# 滚动条
# Android
# RecyclerView上下滚动
# RecyclerView实现纵向和横向滚动
# RecyclerView实现抖音纵向滚动ViewPager效果
# Android RecyclerView 滚动到中间位置的方法示例
# Android RecyclerView 实现快速滚动的示例代码
# Android使用Recyclerview实现图片水平自动循环滚动效果
# XRecyclerView实现下拉刷新、滚动到底部加载更多等功能
# Android中RecyclerView实现分页滚动的方法详解
# Android使用RecyclerView实现水平滚动控件
# Android代码实现AdapterViews和RecyclerView无限滚动
# RecyclerView实现横向滚动效果
# 如何做好
# 有个
# 想了
# 很麻烦
# 蒙板
# 都是
# 有什么
# 我就
# 一是
# 两种
# 可以实现
# 只是一个
# 自带
# 淘宝
# 还不能
# 来实现
# 首页
# 不能够
# 好啦
# 就又
相关文章:
如何在香港服务器上快速搭建免备案网站?
如何在Windows虚拟主机上快速搭建网站?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何配置FTP站点权限与安全设置?
如何快速生成专业多端适配建站电话?
建站之星如何开启自定义404页面避免用户流失?
常州企业网站制作公司,全国继续教育网怎么登录?
如何快速搭建FTP站点实现文件共享?
建站之星2.7模板快速切换与批量管理功能操作指南
建站之星安装后如何自定义网站颜色与字体?
如何使用Golang安装API文档生成工具_快速生成接口文档
ppt制作免费网站有哪些,ppt模板免费下载网站?
建站之星如何修改网站生成路径?
C#如何序列化对象为XML XmlSerializer用法
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
再谈Python中的字符串与字符编码(推荐)
如何正确下载安装西数主机建站助手?
建站主机数据库如何配置才能提升网站性能?
专业公司网站制作公司,用什么语言做企业网站比较好?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
建站之星安装后界面空白如何解决?
宝塔建站无法访问?如何排查配置与端口问题?
如何登录建站主机?访问步骤全解析
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
如何在阿里云购买域名并搭建网站?
如何用PHP快速搭建高效网站?分步指南
佛山企业网站制作公司有哪些,沟通100网上服务官网?
Android滚轮选择时间控件使用详解
如何选择美橙互联多站合一建站方案?
香港服务器部署网站为何提示未备案?
建站DNS解析失败?如何正确配置域名服务器?
c# 服务器GC和工作站GC的区别和设置
建站之星在线版空间:自助建站+智能模板一键生成方案
定制建站如何定义?其核心优势是什么?
建站主机与服务器功能差异如何区分?
如何通过二级域名建站提升品牌影响力?
如何高效利用亚马逊云主机搭建企业网站?
如何在建站主机中优化服务器配置?
c++ stringstream用法详解_c++字符串与数字转换利器
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
建站主机核心功能解析:服务器选择与网站搭建流程指南
制作旅游网站html,怎样注册旅游网站?
制作网站的软件免费下载,免费制作app哪个平台好?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
贸易公司网站制作流程,出口贸易网站设计怎么做?
*请认真填写需求信息,我们会在24小时内与您取得联系。