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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 100道最新Java面试题,常见面试题及答案汇总

    除了掌握扎实的专业技能之外,你还需要一份《Java程序员面试宝典》才能在万千面试者中杀出重围,成功拿下offer。小编特意整理了100道Java面试题,送给大家,希望大家都能顺利通过面试,拿下高薪。赶紧码住吧~~Q1:Java内部类和子类之间有什么区别?答案:内部类是指在一个外部类的内部再定义一个类,内部类对外部类有访问权限,可以访问类中定义的所有变量和方法。子类是从父类(superclass)中继承的类,子类可以访问父类所有public和protected的字段和方法。Q2:Java语言中有哪些

    2022年4月16日
    120
  • Java之父:C语言是撑起一切的基石[通俗易懂]

    Java之父:C语言是撑起一切的基石[通俗易懂]为了忘却的纪念:无论任何领域,伟大的人物,永远不死!2011年10月9日,患有前列腺癌和心脏病的C语言之父丹尼斯·里奇离世。不知不觉,这位伟大的程序员已经离开我们已经有6年了。有人曾说,没有C语言之父,就没有乔布斯。C语言之父影响力其实不止这些。毫不夸张的说,没有C语言之父,就没有微软的Windows10和SurfaceBook,也没有安卓智能手机

    2022年7月8日
    24
  • bzoj 3225: [Sdoi2008] 立方体覆盖 题解「建议收藏」

    bzoj 3225: [Sdoi2008] 立方体覆盖 题解

    2022年2月1日
    42
  • 第八章:activiti多用户任务分配

    第八章:activiti多用户任务分配第八章:activiti多用户任务分配

    2022年4月23日
    129
  • Idea 删除当前一行的快捷键

    Idea 删除当前一行的快捷键使用eclipse,有时候出现多个空行时,习惯使用快捷键:Ctrl+D,删除当前一行。最近使用idea开发,发现手动删除空行,很麻烦,特意查了一下,发现是快捷键:Ctrl+Y。如下图所示:使用Ctrl+Y后删除当前行另外:可以使用设置,讲idea的快捷键设置为eclipse模式…

    2022年9月7日
    4
  • 跨境电商ERP源码

    亚马逊企业购2021战略品类首发,万亿商采风口不容错过!由于电子信息技术和经济全球化的进一步发展,电子商务在国际贸易中的影响力和关键作用日渐突显,已变成中国出口贸易的市场趋势。跨境电商未来的发展前景必定是有助于减少经济成本、推动全球贸易便利化,有助于提高国内群众福祉,有助于打造良好的营商环境推动经济长期健康发展。从2015年开始截止到2019年底,国务院共先后发布了4批全国跨境电商综试区名单。到目前为止,全国有多少个跨境电商综试区?综试区名单批次清单如下:第一批跨境电子商务综合试验区:201

    2022年4月5日
    267

发表回复

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

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