全网整合营销服务商

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

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

Android使用Recyclerview实现图片水平自动循环滚动效果

简介:

本篇博客主要介绍的是如何使用RecyclerView实现图片水平方向自动循环(跑马灯效果)

效果图:

思路:

1.准备m张图片

1.使用Recyclerview实现,返回无数个(实际Interge.MAXVALUE)item,第n个item显示第n%m张图片

3.使用recyclerview.scrollBy  每个一段时间水平滚动一段距离

4.通过layoutManager.findFirstVisibleItemPosition()获取当前显示的第一个View是第几个item,上面的ImageView显示对应de图片

实现代码:

XML文件

1.activity布局文件activity_recy.xml  

<?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">
 <ImageView
  android:layout_width="300dp"
  android:layout_height="350dp"
  android:layout_gravity="center_horizontal"
  android:id="@+id/img"
  android:src="@drawable/p5"
  android:scaleType="fitXY"
  />

  <android.support.v7.widget.RecyclerView
   android:layout_width="match_parent"
   android:layout_height="150dp"
   android:layout_marginTop="10dp"
   android:id="@+id/recyclerview"
   ></android.support.v7.widget.RecyclerView>



</LinearLayout>

2.适配器布局item_horizon.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="wrap_content"
 android:layout_height="match_parent"
 android:orientation="vertical"

 >
 <ImageView
  android:layout_width="100dp"
  android:layout_height="match_parent"
  android:id="@+id/img"
  android:layout_marginLeft="5dp"
  android:layout_marginRight="5dp"
  android:scaleType="fitXY"
  />

</LinearLayout>

Activity

public class HorizontalActivity extends AppCompatActivity implements RecyAdapter.OnItemClickListener {
 private String TAG="HorizontalActivity";

 @BindView(R.id.img)
 ImageView img;
 @BindView(R.id.recyclerview)
 RecyclerView recyclerview;


 private Integer[] mImgIds = {R.drawable.p1, R.drawable.p2, R.drawable.p3, R.drawable.p4, R.drawable.p5,
   R.drawable.pic1, R.drawable.pic5, R.drawable.pic6};
 private List<Integer> datas;
 private RecyAdapter recyAdapter;
 private Handler mHandler=new Handler();
 private LinearLayoutManager layoutManager;

 private int oldItem=0;


 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_recy);
  ButterKnife.bind(this);
  initData();
  initRecy();
  img.setImageResource(datas.get(0));
  recyAdapter.setOnItemClickListener(this);
 }


 Runnable scrollRunnable=new Runnable() {
  @Override
  public void run() {
   recyclerview.scrollBy(3,0);

//   int firstItem = layoutManager.findFirstVisibleItemPosition();
   int firstItem=layoutManager.findFirstVisibleItemPosition();
   if(firstItem!=oldItem&&firstItem>0){
    oldItem=firstItem;
    img.setImageResource(datas.get(oldItem%datas.size()));
   }

   Log.e(TAG, "run: firstItem:"+firstItem );


   mHandler.postDelayed(scrollRunnable,10);
  }
 };

 private void initRecy() {
  recyAdapter=new RecyAdapter(this,datas);

  layoutManager = new LinearLayoutManager(this);
  layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
  recyclerview.setLayoutManager(layoutManager);
  recyclerview.setAdapter(recyAdapter);
 }

 private void initData() {
  datas=new ArrayList<>();
  for (int i = 0; i <mImgIds.length ; i++) {
   datas.add(mImgIds[i]);
  }
 }

 @Override
 protected void onResume() {
  super.onResume();
  mHandler.postDelayed(scrollRunnable,10);
 }

 @Override
 protected void onStop() {
  super.onStop();
  mHandler.removeCallbacks(scrollRunnable);
 }

 @Override
 public void onItemClick(View view, int tag) {
  Toast.makeText(this,"第"+tag+"张图片被点击了",Toast.LENGTH_SHORT).show();
 }
}

适配器RecyAdapter

public class RecyAdapter extends RecyclerView.Adapter<RecyAdapter.ViewHolder> implements View.OnClickListener {

 private Context context;
 private List<Integer> datas;
 private OnItemClickListener onItemClickListener;

 public RecyAdapter(Context context, List<Integer> datas) {
  this.context = context;
  this.datas = datas;
 }

 @Override
 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  View view = LayoutInflater.from(context).inflate(R.layout.item_horizontal, parent, false);
  ViewHolder vh=new ViewHolder(view);
  view.setOnClickListener(this);
  return vh;
 }


 @Override
 public void onBindViewHolder(ViewHolder holder, int position) {
  int newPos=position%datas.size();

  holder.img.setImageResource(datas.get(newPos));

  holder.itemView.setTag(position);


 }

 @Override
 public int getItemCount() {
  return Integer.MAX_VALUE;
 }

 @Override
 public void onClick(View view) {
  if(onItemClickListener!=null){
   onItemClickListener.onItemClick(view, (Integer) view.getTag());
  }
 }


 class ViewHolder extends RecyclerView.ViewHolder {
   ImageView img;
  public ViewHolder(View itemView) {
   super(itemView);
   img=itemView.findViewById(R.id.img);
  }
 }

 public void setOnItemClickListener(OnItemClickListener listener){
  this.onItemClickListener=listener;

 }
 interface OnItemClickListener{
  void onItemClick(View view,int tag);
 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Recyclerview图片水平自动循环滚动  # Recyclerview自动循环滚动  # Recyclerview图片水平滚动  # RecyclerView实现纵向和横向滚动  # RecyclerView实现抖音纵向滚动ViewPager效果  # Android RecyclerView 滚动到中间位置的方法示例  # Android RecyclerView 实现快速滚动的示例代码  # XRecyclerView实现下拉刷新、滚动到底部加载更多等功能  # Android_RecyclerView实现上下滚动广告条实例(带图片)  # Android中RecyclerView实现分页滚动的方法详解  # Android使用RecyclerView实现水平滚动控件  # Android代码实现AdapterViews和RecyclerView无限滚动  # RecyclerView实现横向滚动效果  # 的是  # 几个  # 第一个  # 如何使用  # 数个  # 大家多多  # 跑马灯  # 博客  # drawable  # img  # src  # scaleType  # widget  # fitXY  # support  # id  # orientation  # vertical  # layout_height  # layout_width 


相关文章: 如何基于PHP生成高效IDC网络公司建站源码?  如何选择CMS系统实现快速建站与SEO优化?  如何通过多用户协作模板快速搭建高效企业网站?  如何批量查询域名的建站时间记录?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  制作网站的软件免费下载,免费制作app哪个平台好?  微信推文制作网站有哪些,怎么做微信推文,急?  建站为何优先选择香港服务器?  如何快速辨别茅台真假?关键步骤解析  建站DNS解析失败?如何正确配置域名服务器?  定制建站策划方案_专业建站与网站建设方案一站式指南  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  建站主机数据库如何配置才能提升网站性能?  如何打造高效商业网站?建站目的决定转化率  如何快速搭建高效WAP手机网站吸引移动用户?  营销式网站制作方案,销售哪个网站招聘效果最好?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  如何制作一个表白网站视频,关于勇敢表白的小标题?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  网站制作服务平台,有什么网站可以发布本地服务信息?  无锡营销型网站制作公司,无锡网选车牌流程?  建站之星代理如何获取技术支持?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  深圳网站制作培训,深圳哪些招聘网站比较好?  如何在七牛云存储上搭建网站并设置自定义域名?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  建站主机空间推荐 高性价比配置与快速部署方案解析  网站代码制作软件有哪些,如何生成自己网站的代码?  如何在企业微信快速生成手机电脑官网?  建站主机功能解析:服务器选择与快速搭建指南  建站之星官网登录失败?如何快速解决?  建站主机无法访问?如何排查域名与服务器问题  如何通过宝塔面板实现本地网站访问?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何在IIS中新建站点并配置端口与IP地址?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  如何通过FTP空间快速搭建安全高效网站?  建站之星3.0如何解决常见操作问题?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  山东网站制作公司有哪些,山东大源集团官网?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  建站之星伪静态规则如何设置?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  如何在VPS电脑上快速搭建网站?  如何快速生成专业多端适配建站电话?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  建站之星安装需要哪些步骤及注意事项?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  如何高效配置IIS服务器搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。