解决ViewPager.setCurrentItem中间很多页面切换方案

论坛 期权论坛     
匿名技术用户   2021-1-11 22:06   200   0
<h3 style="padding:0px;background-color:rgb(255,255,255);">本文配套视频</h3>
<ul style="list-style:none;color:rgb(69,69,69);font-family:&#39;-apple-system&#39;, &#39;SF UI Text&#39;, Arial, &#39;PingFang SC&#39;, &#39;Hiragino Sans GB&#39;, &#39;Microsoft YaHei&#39;, &#39;WenQuanYi Micro Hei&#39;, sans-serif, SimHei, SimSun;background-color:rgb(255,255,255);"><li style="padding:0px;"><a href="https://v.qq.com/x/page/n0501ylwqx1.html" style="margin:0px;padding:0px;">ViewPager.setCurrentItem的bug演示一</a></li><li style="padding:0px;"><a href="https://v.qq.com/x/page/g05012qi6hs.html" style="margin:0px;padding:0px;">ViewPager.setCurrentItem解决方案二</a></li></ul>
<p style="font-family:&#39;-apple-system&#39;, &#39;SF UI Text&#39;, Arial, &#39;PingFang SC&#39;, &#39;Hiragino Sans GB&#39;, &#39;Microsoft YaHei&#39;, &#39;WenQuanYi Micro Hei&#39;, sans-serif, SimHei, SimSun;background-color:rgb(255,255,255);">今天做项目用ViewPager.setCurrentItem 方法,如果两个页面相聚比较远,就会闪瞎我的钛合金双眼,中间切换大概20个页面,如下所示: <br><img alt="" src="https://201907.oss-cn-shanghai.aliyuncs.com/cs/5606289-ce0a1498ff87af040d8226f8980b2d65" style="border:0px;margin-top:24px;margin-bottom:24px;" title=""></p>
<p style="font-family:&#39;-apple-system&#39;, &#39;SF UI Text&#39;, Arial, &#39;PingFang SC&#39;, &#39;Hiragino Sans GB&#39;, &#39;Microsoft YaHei&#39;, &#39;WenQuanYi Micro Hei&#39;, sans-serif, SimHei, SimSun;background-color:rgb(255,255,255);">setCurrentItem第二个参数设置false,四不四很简单,直接使用如下代码:</p>
<pre class="blockcode" style="font-size:14px;line-height:22px;"><code class="hljs bash has-numbering">ViewPager.setCurrentItem(position,<span class="hljs-literal" style="margin:0px;padding:0px;">false</span>);</code></pre>
<ul class="pre-numbering"><li style="color:rgb(153,153,153);">1</li></ul>
<p style="font-family:&#39;-apple-system&#39;, &#39;SF UI Text&#39;, Arial, &#39;PingFang SC&#39;, &#39;Hiragino Sans GB&#39;, &#39;Microsoft YaHei&#39;, &#39;WenQuanYi Micro Hei&#39;, sans-serif, SimHei, SimSun;background-color:rgb(255,255,255);">很不幸的是,使用上面的代码会出现如下效果,扎心了老铁: <br><img alt="" src="https://201907.oss-cn-shanghai.aliyuncs.com/cs/5606289-36ea46b654bab671b84bed127732e592" style="border:0px;margin-top:24px;margin-bottom:24px;" title=""></p>
<p style="font-family:&#39;-apple-system&#39;, &#39;SF UI Text&#39;, Arial, &#39;PingFang SC&#39;, &#39;Hiragino Sans GB&#39;, &#39;Microsoft YaHei&#39;, &#39;WenQuanYi Micro Hei&#39;, sans-serif, SimHei, SimSun;background-color:rgb(255,255,255);">从第一题点击切换到第十八题,你会发现页面显示空白,如果从第十个页面切换到第十五个页面没事,平时大家估计没有发现这个bug,一般我们使用ViewPager都是底下5个tab页面,从第一个切换到第五个没事,之前我也以为把第二个参数设置false就行,今天才发现,原来如果当页面比较少的时候,大概十个以内,一般没有问题,如果超过十个页面切换就会出现空白,加载不了数据,扎心了,提出解决方案吧,ViewPager滑动使用的是Scroll,咱们把Scroll的滑动时间duration 设置为0就行。</p>
<h3 style="padding:0px;background-color:rgb(255,255,255);"><a style="margin:0px;padding:0px;font-weight:400;"></a>自定义一个Scroll类,用于控制ViewPager滑动速度:</h3>
<pre class="blockcode" style="font-size:14px;line-height:22px;"><code class="hljs java has-numbering"><span class="hljs-keyword" style="margin:0px;padding:0px;">public</span>  <span class="hljs-class" style="margin:0px;padding:0px;"><span class="hljs-keyword" style="margin:0px;padding:0px;">class</span> <span class="hljs-title" style="margin:0px;padding:0px;">MScroller</span> <span class="hljs-keyword" style="margin:0px;padding:0px;">extends</span> <span class="hljs-title" style="margin:0px;padding:0px;">Scroller</span> {<!-- --></span>

   <span class="hljs-keyword" style="margin:0px;padding:0px;">private</span> <span class="hljs-keyword" style="margin:0px;padding:0px;">static</span> <span class="hljs-keyword" style="margin:0px;padding:0px;">final</span> Interpolator sInterpolator &#61; <span class="hljs-keyword" style="margin:0px;padding:0px;">new</span> Interpolator() {
   <span class="hljs-keyword" style="margin:0px;padding:0px;">public</span> <span class="hljs-keyword" style="margin:0px;padding:0px;">float</span> <span class="hljs-title" style="margin:0px;padding:0px;">getInterpolation</span>(<span class="hljs-keyword" style="margin:0px;padding:0px;">float</span> t) {
            t -&#61; <span class="hljs-number" style="margin:0px;padding:0px;">1.0</span>f;
            <span class="hljs-keyword" style="margin:0px;padding:0px;">return</span> t * t * t * t * t &#43; <span class="hljs-number" style="margin:0px;padding:0px;">1.0</span>f;
        }
    };


  <span class="hljs-keyword" style="margin:0px;padding:0px;">public</span> <span class="hljs-keyword" style="margin:0px;padding:0px;">boolean</span> noDuration;

  <span class="hljs-keyword" style="margin:0px;padding:0px;">public</span> <span class="hljs-keyword" style="margin:0px;padding:0px;">void</span> <span class="hljs-title" style="margin:0px;padding:0px;">setNoDuration</span>(<span clas
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP