AndroidImageSlider第一张图闪过的问题解决
1. AndroidImageSlider的使用:
参考源码:https://github.com/daimajia/AndroidImageSlider
当然网上介绍使用方法的很多,搜一搜。
2. 遇到的第一张闪过问题解决(其实我在想直接换一个其他的使用不久得了,但还是先解决了,再换)
* 导致这种问题的原因:(原因可能不是很详细,直接跳过看解决就好)
在布局中使用SliderLayout,这样在数据未加载完成时,已经创建了对象。经过一番排查发现问题实在这里:
public SliderLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        mContext = context;
        LayoutInflater.from(context).inflate(R.layout.slider_layout, this, true);
        final TypedArray attributes = context.getTheme().obtainStyledAttributes(attrs,R.styleable.SliderLayout,
                defStyle,0);
        mTransformerSpan = attributes.getInteger(R.styleable.SliderLayout_pager_animation_span, 1100);
        mTransformerId = attributes.getInt(R.styleable.SliderLayout_pager_animation, Transformer.Default.ordinal());
        mAutoCycle = attributes.getBoolean(R.styleable.SliderLayout_auto_cycle,true);
        int visibility = attributes.getInt(R.styleable.SliderLayout_indicator_visibility,0);
        for(PagerIndicator.IndicatorVisibility v: PagerIndicator.IndicatorVisibility.values()){
            if(v.ordinal() == visibility){
                mIndicatorVisibility = v;
                break;
            }
        }
        mSliderAdapter = new SliderAdapter(mContext);
        PagerAdapter wrappedAdapter = new InfinitePagerAdapter(mSliderAdapter);
        mViewPager = (InfiniteViewPager)findViewById(R.id.daimajia_slider_viewpager);
        mViewPager.setAdapter(wrappedAdapter);
        mViewPager.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int action = event.getAction();
                switch (action) {
                     case MotionEvent.ACTION_UP:
                        recoverCycle();
                        break;
                }
                return false;
            }
        });
        attributes.recycle();
        setPresetIndicator(PresetIndicators.Center_Bottom);
        setPresetTransformer(mTransformerId);
        setSliderTransformDuration(mTransformerSpan,null);
        setIndicatorVisibility(mIndicatorVisibility);
        if(mAutoCycle){
            startAutoCycle();
        }
    }
创建了对象,就已经设置了Adapter,网络加载数据,导致时间延迟,加载完成,再设置Adapter时,会引发 ViewPagerEx 中的一个 PagerObserver 中的 onChanged() 方法引起的,具体是可以去看一下源码。了解了如何造成的,然并卵。直接 compile 进来的,你改不了源码。只能退而求其次。
* 解决方法:
我在加载完数据时再创建SliderLayout对象,进行数据填充,问题就解决了。这样就需要动态创建对象,并添加在相应的位置。之前那个位置,就可以用一个容器来代替。看代码:
private void initSliderLayout(List<PromotionsBean> promotionList) {
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        sliderLayout = new SliderLayout(getContext());
        sliderLayout.setLayoutParams(params);
        sliderLayout.requestLayout();
        for (int i = 0; i < promotionList.size(); i++) {
            final PromotionsBean promotionsBean = promotionList.get(i);
            DefaultSliderView textSliderView = new DefaultSliderView(getContext());
//            textSliderView.description(item.getInfo());//标题
            textSliderView.image(promotionsBean.getImage());//加载图片
            textSliderView.setOnSliderClickListener(new BaseSliderView.OnSliderClickListener() {
                @Override
                public void onSliderClick(BaseSliderView slider) {
                    Intent intent = new Intent(getContext(), WRTWebActivity.class);
                    intent.setAction(promotionsBean.getLink());
                    startActivity(intent);
                }
            });
            sliderLayout.addSlider(textSliderView);
        }
        bannerRoot.addView(sliderLayout, 0); //bannerRoot 为容器
        sliderLayout.startAutoCycle(4000, 4000, true);
    }
AndroidImageSlider第一张图闪过的问题解决的更多相关文章
- PHP提取页面第一张图为缩略图的代码
		
<?php $p = '/<img.*?src=[\'|\"](.+?)[\'|\"].*?>/i'; preg_match_all($p,$str,$match ...
 - 通过三张图了解Redux中的重要概念
		
上周利用业余的时间看了看Redux,刚开始有点不适应,一下在有了Action.Reducer.Store和Middleware这么多新的概念. 经过一些了解之后,发现Redux的单向数据里的模式还是比 ...
 - 三张图让你高速明确activity与fragment生命周期的异同点
		
第一张图:activity的生命周期 第二张图:fragment的生命周期 第三张图:activity与fragment生命周期对照 补充:假设你还是不明确,请翻译一下你不理解的相应单词. ----- ...
 - 用两张图告诉你,为什么你的App会卡顿?
		
有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? 知道Android究竟是如何在屏幕上显示我们期望的画面的? 对Android的视图架构有整体把握. 学会 ...
 - jquery手写焦点轮播图-------解决最后一张无缝跳转第一张的问题
		
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - 2.5w字 + 36 张图爆肝操作系统面试题,太牛逼了!
		
欢迎各位大佬访问我的 github ,跪求 star bestJavaer 大家好,我是 cxuan,我之前汇总了一下关于操作系统的面试题,最近又重新翻阅了一下发现不是很全,现在也到了面试季了,所以我 ...
 - 为了拿捏 Redis 数据结构,我画了 40 张图(完整版)
		
大家好,我是小林. Redis 为什么那么快? 除了它是内存数据库,使得所有的操作都在内存上进行之外,还有一个重要因素,它实现的数据结构,使得我们对数据进行增删查改操作时,Redis 能高效的处理. ...
 - 40张图+万字,从9个数据类型帮你稳稳的拿捏Redis数据结构
		
摘要:本文把Redis新旧版本的数据结构说图解一遍,共有 9 种数据结构:SDS.双向链表.压缩列表.哈希表.跳表.整数集合.quicklist.listpack. 本文分享自华为云社区<为了拿 ...
 - 深入理解javascript作用域系列第五篇——一张图理解执行环境和作用域
		
× 目录 [1]图示 [2]概念 [3]说明[4]总结 前面的话 对于执行环境(execution context)和作用域(scope)并不容易区分,甚至很多人认为它们就是一回事,只是高程和犀牛书关 ...
 
随机推荐
- php实现共享内存进程通信函数之_shm
			
前面介绍了php实现共享内存的一个函数shmop,也应用到了项目中,不过shmop有局限性,那就是只支持字符串类型的:sem经过我的测试,是混合型,支持数组类型,可以直接存储,直接获取,少了多余的步骤 ...
 - python的__str__()和__repr__()方法
			
__str__()和__repe__()方法定义一个值通过print打印时返回时的显示样式 l=list('hello') print(l) #['h', 'e', 'l', 'l', 'o'] cl ...
 - vs变量监视提示-VAR-CREATE: UNABLE TO CREATE VARIABLE OBJECT解决方法
			
昨天有个linux应用在使用vs 远程debug的时候,debug可以正常进行,但是监视变量的时候提示-VAR-CREATE: UNABLE TO CREATE VARIABLE OBJECT,经测试 ...
 - NPM安装步骤
			
一.使用之前,我们先来掌握3个东西是用来干什么的. npm: Nodejs下的包管理器. webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资 ...
 - Zookeeper .Net客户端代码
			
本来此客户端可以通过NuGet获取,如果会使用NuGet, 则可以使用命令Install-Package ZooKeeperNet(需要最新版本的NuGet) 如果不会,就去 NuGet官网了解htt ...
 - 01:adminLTE2基本使用
			
1.1 adminLTE介绍 1.adminLTE 介绍 1.基于Bootstrap3高度可定制的响应式管理模板,免去前端架构师大量的js和css的编写 2.adminLTE除了可以使用bootstr ...
 - Adobe阅读器渗透攻击
			
Adobe阅读器渗透攻击 实验前准备 1.两台虚拟机,其中一台为kali,一台为windows xp sp3(老师给的xp虚拟机winxpAttaker,密码:mima1234). 2.设置虚拟机网络 ...
 - 计算多数的乘积(Python实现)
			
1 # -*- coding: utf-8 -*- # sum_of_products.py # @author 0yst3r # @description 两数之积及多数之积 # @created ...
 - VSCode 预览 .md 文件
			
VSCode安装md插件 选择Extensions, 输入Markdown Theme Kit,下面会出现相应插件,点击install(截图中因为我已经安装,所以是设置) 或者安装插件Markdown ...
 - Codeforces 837E Vasya's Function - 数论
			
Vasya is studying number theory. He has denoted a function f(a, b) such that: f(a, 0) = 0; f(a, b) = ...