html中图片自动循环滚动代码,实现长图片自动循环滚动效果[通俗易懂]

html中图片自动循环滚动代码,实现长图片自动循环滚动效果[通俗易懂]实现思路滚动效果用实现。有个方法,可以滚动到指定位置(有滚动效果,不是直接到指定位置),不了解的看这里种定位滚动方式演示。每一个Item是一张长图,这样首尾相接滚动起来(滚到无限远)就是无限循环的效果,然后再改变滚动的速度,就可以了。{;@(){(savedInstanceState);//全屏getWindow().setFlags(WindowManager.LayoutParams.FLAG…

大家好,又见面了,我是你们的朋友全栈君。

21105e3a5d690580173714a784fee100.jpg

实现思路

滚动效果用实现。有个方法,可以滚动到指定位置(有滚动效果,不是直接到指定位置),不了解的看这里种定位滚动方式演示。每一个Item是一张长图,这样首尾相接滚动起来(滚到无限远)就是无限循环的效果,然后再改变滚动的速度,就可以了。

{;@(){(savedInstanceState);//全屏getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(R.layout.activity_main);mRecyclerView=findViewById(R.id.mRecyclerView);mRecyclerView.setAdapter(newSplashAdapter(MainActivity.this));mRecyclerView.setLayoutManager(newScollLinearLayoutManager(MainActivity.this));//smoothScrollToPosition滚动到某个位置(有滚动效果)mRecyclerView.smoothScrollToPosition(Integer.MAX_VALUE/2);}}

1.无限循环

将RecyclerView的Item数量设置成很大的值,用smoothScrollToPosition方法滚到很远的位置,就能实现这样的效果,很多banner轮播图的实现也是如此;

publicclassSplashAdapterextendsRecyclerView.AdapterSplashAdapter.ViewHolder{privateintimgWidth;publicSplashAdapter(Contextcontext){imgWidth=EasyUtil.getScreenWidth(context);}@OverridepublicViewHolderonCreateViewHolder(ViewGroupparent,intviewType){ViewitemView=LayoutInflater.from(parent.getContext()).inflate(R.layout.item_splash,parent,false);returnnewViewHolder(itemView);}@OverridepublicvoidonBindViewHolder(finalViewHolderholder,finalintposition){/*ViewGroup.LayoutParamslp=holder.item_bg.getLayoutParams();lp.width=imgWidth;lp.height=imgWidth*5;holder.item_bg.setLayoutParams(lp);*/}@OverridepublicintgetItemCount(){returnInteger.MAX_VALUE;}publicclassViewHolderextendsRecyclerView.ViewHolder{ImageViewitem_bg;publicViewHolder(finalViewitemView){super(itemView);item_bg=itemView.findViewById(R.id.item_bg);}}}

2.控制smoothScrollToPosition的滑动速度

参考RecyclerView调用smoothScrollToPosition()控制滑动速度,修改MILLISECONDS_PER_INCH的值即可

/***更改RecyclerView滚动的速度*/publicclassScollLinearLayoutManagerextendsLinearLayoutManager{privatefloatMILLISECONDS_PER_INCH=25f;//修改可以改变数据,越大速度越慢privateContextcontxt;publicScollLinearLayoutManager(Contextcontext){super(context);this.contxt=context;}@OverridepublicvoidsmoothScrollToPosition(RecyclerViewrecyclerView,RecyclerView.Statestate,intposition){LinearSmoothScrollerlinearSmoothScroller=newLinearSmoothScroller(recyclerView.getContext()){@OverridepublicPointFcomputeScrollVectorForPosition(inttargetPosition){returnScollLinearLayoutManager.this.computeScrollVectorForPosition(targetPosition);}@OverrideprotectedfloatcalculateSpeedPerPixel(DisplayMetricsdisplayMetrics){returnMILLISECONDS_PER_INCH/displayMetrics.density;//返回滑动一个pixel需要多少毫秒}};linearSmoothScroller.setTargetPosition(position);startSmoothScroll(linearSmoothScroller);}//可以用来设置速度publicvoidsetSpeedSlow(floatx){//自己在这里用density去乘,希望不同分辨率设备上滑动速度相同//0.3f是自己估摸的一个值,可以根据不同需求自己修改MILLISECONDS_PER_INCH=contxt.getResources().getDisplayMetrics().density*0.3f+(x);}}

3.图片宽度充满屏幕、高度按图片原始宽高比例自适应

@SuppressLint(“AppCompatCustomView”)publicclassFitImageViewextendsImageView{publicFitImageView(Contextcontext){super(context);}publicFitImageView(Contextcontext,AttributeSetattrs){super(context,attrs);}@OverrideprotectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){Drawabledrawable=getDrawable();if(drawable!=null){intwidth=MeasureSpec.getSize(widthMeasureSpec);intheight=(int)Math.ceil((float)width*(float)drawable.getIntrinsicHeight()/(float)drawable.getIntrinsicWidth());setMeasuredDimension(width,height);}else{super.onMeasure(widthMeasureSpec,heightMeasureSpec);}}}

4.这里需要注意的是、Item的根布局android:layout_height=”wrap_content”,否则图片高度会受限

android.support.constraint.ConstraintLayoutxmlns:android=”http://schemas.android.com/apk/res/android”android:layout_width=”match_parent”android:layout_height=”wrap_content”com.next.scrollimagedemo.view.FitImageViewandroid:id=”@+id/item_bg”android:layout_width=”match_parent”android:layout_height=”wrap_content”android:src=”@mipmap/ww1″/!–ImageViewandroid:id=”@+id/item_bg”android:layout_width=”match_parent”android:layout_height=”wrap_content”android:src=”@mipmap/ww2″android:scaleType=”centerCrop”/–/android.support.constraint.ConstraintLayout

5.使RecyclerView不能手指触碰滑动

加层View屏蔽掉事件就好了

android.support.constraint.ConstraintLayoutxmlns:android=”http://schemas.android.com/apk/res/android”xmlns:app=”http://schemas.android.com/apk/res-auto”xmlns:tools=”http://schemas.android.com/tools”android:layout_width=”match_parent”android:layout_height=”match_parent”tools:context=”.MainActivity”android.support.v7.widget.RecyclerViewandroid:id=”@+id/mRecyclerView”android:layout_width=”match_parent”android:layout_height=”match_parent”/android.support.v7.widget.RecyclerViewTextViewandroid:layout_width=”match_parent”android:layout_height=”match_parent”android:background=”#80000000″android:clickable=”true”/ImageViewandroid:layout_width=”wrap_content”android:layout_height=”80dp”android:layout_marginTop=”80dp”app:layout_constraintTop_toTopOf=”parent”android:scaleType=”centerInside”android:src=”@mipmap/slogan”app:layout_constraintLeft_toLeftOf=”parent”app:layout_constraintRight_toRightOf=”parent”//android.support.constraint.ConstraintLayout

完成效果

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161306.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HTTP协议具体解释

    HTTP协议具体解释

    2022年1月8日
    46
  • Python基础常见面试题总结[通俗易懂]

    Python基础常见面试题总结[通俗易懂]以下是总结的一些常见的Python基础面试题,帮助大家回顾基础知识,了解面试套路。会一直保持更新状态。PS:加粗为需要注意的点。基础知识题1、深拷贝和浅拷贝的区别是什么?深拷贝是将对象本身复制给另一个对象。这意味着如果对对象的副本进行更改时不会影响原对象。浅拷贝是将对象的引用复制给另一个对象。因此,如果我们在副本中进行更改,则会影响原对象。**2、能否解释一下*args和kwar…

    2022年10月21日
    5
  • UCOSII操作系统学习之任务间的通信(1)

    UCOSII操作系统学习之任务间的通信(1)1.任务间通讯方式:信号量和邮箱为了把描述事件的数据结构统一起来,UCOSII使用叫做事件控制块(ECB)的数据结构来描述诸如信号量、邮箱(消息邮箱)和消息队列这些事件。信号量,邮箱,消息队列都是一类事件。2.信号量:1)创建信号量OS_EVENT*OSSemCreate(INT16Ucnt)…

    2022年5月11日
    50
  • IDEA git配置[通俗易懂]

    1、idea配置git(versioncontrol)1.2、拉取代码idea菜单上选择VCS输入git代码地址,注意是http协议的地址不要用git协议的地址,目前用git协议的地址老是报错,因为git协议的址找不到配置sshprivatekey的地方,后面找到方法再更一版。点确定,代码就可以拉下来了。1.3、拉取代码提交代码快捷键ct…

    2022年4月14日
    67
  • make wildcard_其在古文中的用法

    make wildcard_其在古文中的用法
    在Makefile规则中,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的用法是:$(wildcardPATTERN…)。在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空。需要注意的是:这种情况下规则中通配符的展开和上一小节匹配通配符的区别。
    一般我们可以使用“$(wildcard*.c)”来获取工作

    2025年8月25日
    2
  • linux怎样用jps命令_hadoopjps只有五个

    linux怎样用jps命令_hadoopjps只有五个前言:在网上有好多说是以root身份vi/etc/profile,然后在下面加一行exportPATH="usr/java/jdk160_05/bin:$PATH"(其中jdk160_05是你的安装目录,依你自己的安装情况所决定),然后source/etc/profile即可解决我觉得这是当你自己安装jdk后jps命令不好使时可以这样解决,但是经过我试验你自己安装jdk成功后(如:在解压jd…

    2026年2月5日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号