全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android_RecyclerView实现上下滚动广告条实例(带图片)

前言

公司新项目首页有个类似京东/淘宝滚动广告条,查了一下大概都是两种实现方式,一是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小时内与您取得联系。