前言

公司新项目首页有个类似京东/淘宝滚动广告条,查了一下大概都是两种实现方式,一是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;}@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home_maintain, null);return new MyViewHolder(view);}@Overridepublic void onBindViewHolder(MyViewHolder holder, int position) {holder.tv.setText(list.get(position % 4));}@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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,很多细节没太考虑……有什么问题还望大佬们指出,不胜感激!

给大佬递茶.jpg

Android_RecyclerView实现上下滚动广告条(带图片)相关推荐

  1. Android基础控件——ViewFlipper的使用,仿淘宝头条垂直滚动广告条

    ViewFlipper的使用,仿淘宝头条垂直滚动广告条 学习,学习,学以致用 ViewFlipper是安卓自带的控件,很多人可能很少知道这个控件,这个控件很简单,也很好理解,能不能用上实战就看你们的本 ...

  2. Android 竖直滚动广告条、上下滚动广告条,View滚动广告条;

    四种方式实现仿淘宝滚动广告条: TextView+Handler延时动画 实现滚动效果: 自定义ViewFlipper 实现滚动效果:(用法简单,推荐使用) RecyclerView+子线程延时 实现 ...

  3. Android循环滚动广告条的完美实现,封装方便,平滑过渡,从网络加载图片,点击广告进入对应网址

    关注finddreams,一起分享,一起进步: http://blog.csdn.net/finddreams/article/details/44619589 今天给大家带来一点干货,就是横向循环滚 ...

  4. Android控件——ViewFlipper的使用,垂直滚动广告条

    1 前言 之前开发过一个TextView的滚动显示,但是局限性比较大,只能显示文字,不能显示图片等其他View.对比淘宝App的淘宝头条,发现显示的内容挺丰富的.网上搜索了下资料发现android自带 ...

  5. android自定义控件之滚动广告条

    在一些电子商务网站上经常能够看到一些滚动的广告条,许多软件在首次使用时也有类似的广告条,如图: 其实在github上有实现这种效果的控件,不过这东西做起来也是很简单,我们今天就来看看该怎么做. 先来看 ...

  6. Android自定义组件系列【16】——最帅气的自动滚动广告条

    前一段时间要实现一个滚动的广告条,参考了一下网上许多实现,发现实现都很麻烦,所以我决定自己使用ViewFlipper来实现一个,在此将代码贴出来,与大家共享. 转载请说明出处:http://blog. ...

  7. Android自定义View——仿1号店垂直滚动广告条实现

    效果图 原理分析 整个过程都是基于坐标Y的增加和交换进行处理的,Y值都会一直增加到endY,然后进行交换逻辑 实现步骤 1.初始化变量 由于1号店是两句话的滚动,所以我们也是使用两句话来实现的 pub ...

  8. Android【垂直滚动广告条】仿淘宝头条1号店京东—垂直滚动广告条

    文章为博主原创,欢迎大家进行阅读和转载,转载请注明出处:http://blog.csdn.net/sophie237/article/details/54911349 淘宝头条是淘宝App中很经典的一 ...

  9. Android 垂直滚动广告条,仿淘宝头条垂直滚动展示最新消息

    最新的项目有个新需求,就是要去垂直滚动去展示最新发布的消息,类似淘宝头条的那种 1.功能实现其实很简单,就用到Android 的原生控件ViewFlipper <ViewFlipperandro ...

最新文章

  1. 软件测试之移动应用的压力和性能测试
  2. 学数学,你要如何过题海:游泳?冲浪?划小船?开游艇?
  3. @ImportResource
  4. 第十三期:消灭 Java 代码的“坏味道”
  5. Jboss启动报错——DailyRollingFileAppender无法转换异常
  6. 北京证券交易所首批三大基本业务规则开始征求意见
  7. Who am I:最烧脑的社会工程学电影
  8. 拓端tecdat|R语言GJR-GARCH和GARCH波动率预测普尔指数时间序列和Mincer Zarnowitz回归、DM检验、JB检验
  9. jquery解析php json,Jquery解析json数据详解_jquery
  10. 《apue》 首次拜读完经典之作,两三记录
  11. word自带公式编辑_原来有这样几种方式打开Word中的公式编辑器
  12. 微信小程序--几个常用标签
  13. matlab全桥电路设计,全桥变换电路的Matlab仿真及实验装置开发.pdf
  14. matlab输出相反数,在MATLAB将等于某一数列相反数的数据都赋值为0
  15. Unity Shader 之 简单实现物体被压扁(top顶点的逐渐与bottom顶点重合)的效果
  16. 输入密码三次,简单程序
  17. 关于ROHDESCHWARZ公司电流探头EZ-17系数修正的说明 1
  18. ubutnu18+cuda11.1+cudnn8.0.4+nvidia-driver-465
  19. 百度地图,你学会了吗
  20. Caused by: org.apache.ibatis.binding.BindingException: Parameter ‘memberId‘ not found. Available par

热门文章

  1. 无废话SharePoint入门教程二[SharePoint发展、工具及术语]
  2. Mysql 数据类型转换详解
  3. IO流总结——字节流与字符流的区别
  4. Java Math toIntExact() 使用方法及示例 long转int
  5. 高级算法梳理-XGB
  6. 新手站长网站优化的方法
  7. 如何创建企业邮箱?在网页创建邮箱步骤一看便知
  8. 单文档工具栏按钮添加文字
  9. mixamo进不去_路由器登录入口进不去解决方法
  10. iphone录屏在哪里打开?手机上有哪些录制的方法