整合大量开源库项目(五)跳动的TextView JumpingBeans,良好体验的滚动栏ConvenientBanner

转载请注明出处:王亟亟的大牛之路

时间过得很快,这一系列已经写了第五篇了(感觉还要写好久),今天又引入了2个很好用的库JumpingBeans,ConvenientBanner.首先,先看一下效果。

1.这2个控件做了什么?

JumpingBeans是加载页面时那个蓝色跳动的动画效果。

JumpingBeans:https://github.com/frakbot/JumpingBeans

ConvenientBanner是滚动的那个广告栏。

ConvenientBanner:https://github.com/saiwu-bigkoo/Android-ConvenientBanner

2.怎么下载?

  compile ‘net.frakbot:jumpingbeans:1.3.0‘
  compile ‘com.bigkoo:convenientbanner:1.1.4‘

3.为什么要用?

TextView之类的控件的跳动可以用动画实现,甚至可以拼接多个控件然后根据运算进行位置的模拟变化,但是JumpingBeans封装的更简单,很方便我们使用。

滚动的广告栏几乎在大多数的线上产品中都有出现(诸如ViewPager+Fragment),ConvenientBanner对本地/网络的情况都做了简单实用的处理,让我们省去了换算时间,监听注册一系列重复低效的操作。



接下来我们来说下如何使用

JumpingBeans

a.还是正常的一个TextView像这样:

  <TextView
      android:id="@+id/jumpTextView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_below="@+id/circleProgressBar"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="20dp"
      android:text="加 载 中 。。"
      android:textColor="@color/DoderBlue"
      android:textSize="20dp" />

b.然后和往常一样findViewByIdjumpTextView = (TextView) findViewById(R.id.jumpTextView);

c.声明一个JumpingBeans 对象private JumpingBeans jumpingBeans;

d.然后对动画效果进行设置,我们来看一下怎么实现的

jumpingBeans = JumpingBeans.with(jumpTextView)

.makeTextJump(0, jumpTextView.getText().toString().indexOf(‘ ‘))

.setIsWave(true)

.setLoopDuration(800) // ms

.build();

e.把这个TextView绑定到JumpingBeans 中

  public static Builder with(@NonNull TextView textView) {
        return new Builder(textView);
    }

具体动作的哪几个字如传入(0,3)就是第1-第4个字有动画效果

   public Builder makeTextJump(int startPos, int endPos) {
            CharSequence text = textView.getText();
            ensureTextCanJump(startPos, endPos, text);

            this.text = text;
            this.wave = true;
            this.startPos = startPos;
            this.endPos = endPos;

            return this;
        }

对makeTextJump方法传入参数的检验,以保证不会start>end这种情况

    private static CharSequence ensureTextCanJump(int startPos, int endPos, CharSequence text) {
        if (text == null) {
            throw new NullPointerException("The textView text must not be null");
        }

        if (endPos < startPos) {
            throw new IllegalArgumentException("The start position must be smaller than the end position");
        }

        if (startPos < 0) {
            throw new IndexOutOfBoundsException("The start position must be non-negative");
        }

        if (endPos > text.length()) {
            throw new IndexOutOfBoundsException("The end position must be smaller than the text length");
        }
        return text;
    }

是否允许有动画

  public Builder setIsWave(boolean wave) {
            this.wave = wave;
            return this;
        }

效果持续的时间,毫秒为单位

public Builder setLoopDuration(int loopDuration) {
            if (loopDuration < 1) {
                throw new IllegalArgumentException("The loop duration must be bigger than zero");
            }
            this.loopDuration = loopDuration;
            return this;
        }

判断一系列参数,构建效果并执行(重新对TextView的字符串内容进行拼接)

   public JumpingBeans build() {
            SpannableStringBuilder sbb = new SpannableStringBuilder(text);
            JumpingBeansSpan[] spans;
            if (wave) {
                spans = getJumpingBeansSpans(sbb);
            } else {
                spans = buildSingleSpan(sbb);
            }

            textView.setText(sbb);
            return new JumpingBeans(spans, textView);
        }

f.结束时记得把开启的动画关了,不然内存泄漏你懂的,调用stopJumping()

  public void stopJumping() {
        for (JumpingBeansSpan bean : jumpingBeans) {
            if (bean != null) {
                bean.teardown();
            }
        }

        cleanupSpansFrom(textView.get());
    }

使用起来 是不是很简单?



ConvenientBanner

a.先放一个控件,只需要一个哦!一般实现的方式需要布局的ViewPager fragment之类的还要标签点的imageview等等还是蛮麻烦的。

<com.bigkoo.convenientbanner.ConvenientBanner
       android:id="@+id/convenientBanner"
       android:layout_width="match_parent"
       android:layout_height="200dp"
       app:canLoop="true"/>

b.声明private ConvenientBanner convenientBanner;

c.获取控件convenientBanner = (ConvenientBanner) findViewById(R.id.convenientBanner);

d.对具体的内容进行设置:

//自定义你的Holder,实现更多复杂的界面,不一定是图片翻页,其他任何控件翻页亦可。
convenientBanner.setPages(
                new CBViewHolderCreator<LocalImageHolderView>() {
                    @Override
                    public LocalImageHolderView createHolder() {
                        return new LocalImageHolderView();
                    }
                }, localImages)
                //设置两个点图片作为翻页指示器,不设置则没有指示器,可以根据自己需求自行配合自己的指示器,不需要圆点指示器可用不设
                .setPageIndicator(new int[]{R.drawable.ic_page_indicator, R.drawable.ic_page_indicator_focused})
                //设置指示器的方向
                .setPageIndicatorAlign(ConvenientBanner.PageIndicatorAlign.ALIGN_PARENT_RIGHT)
                //设置翻页的效果,不需要翻页效果可用不设
                .setPageTransformer(Transformer.DefaultTransformer);
//        convenientBanner.setManualPageable(false);//设置不能手动影响

public class LocalImageHolderView implements CBPageAdapter.Holder<Integer>{
    private ImageView imageView;
    @Override
    public View createView(Context context) {
        imageView = new ImageView(context);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        return imageView;
    }

    @Override
    public void UpdateUI(Context context, final int position, Integer data) {
        imageView.setImageResource(data);
    }
}

https://github.com/saiwu-bigkoo/Android-ConvenientBanner有详细的Demo (并且,项目仍在维护当中,感谢作者https://github.com/saiwu-bigkoo)

Soyi项目代码地址:https://github.com/ddwhan0123/SoyiGit

观众老爷麻烦点个赞,谢谢你的支持

时间: 2024-10-18 22:29:31

整合大量开源库项目(五)跳动的TextView JumpingBeans,良好体验的滚动栏ConvenientBanner的相关文章

整合大量开源库项目(八)能够载入Gif动画的GifImageView

转载请注明出处王亟亟的大牛之路 上周大多数时间都是依据兴起,想到什么做什么写了几个自己定义控件,把Soyi丢在那没怎么动,今天就把写的东西整合进来,顺便把SOyi"个人研发的结构理一下". 先上一下今天整合之后的效果,以及新加进来的几个库: 依照惯例,贴一下Gradle的配置: dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' compile '

整合大量开源库项目(六)ListView动画,Activity&quot;抽象化&quot;,顺便提一提”抽象类“And&quot;接口&quot;

转载请注明出处:王亟亟的大牛之路 昨天发了一个自己写的简单的诸如EditText一个自定义控件,不过貌似反响不太好,这里再推一推,希望大家给予意见和支持:http://blog.csdn.net/ddwhan0123/article/details/50235151 OK,言归正传,上一次添加了一个"个人开发:界面,希望把之后自己写的一些东西都加入里面,作为一个"大型Lib"使用,所以就简单的把内容和界面搭了一下,也大致区分了下栏目,这种展示性的还是以ListView为佳,上

整合大量开源库项目(七)ListView迁移成 RecyclerView

转载请注明出处:王亟亟的大牛之路 开场先介绍下为什么使用RecyclerView,以及一些简单的理论知识 Q:为什么使用RecyclerView? A: 一个非常灵活的用于在有限的窗口范围内显示大量数据的控件. Q:使用RecyclerView的好处是什么? A:提供了一种插拔式的体验,高度的解耦,异常的灵活 Q:RecyclerView可以实现什么? A:ListView.GridView.瀑布效果等等等,并且性能优异! OK,理论知识大致的介绍到这里,更多内容我们在代码中实现. 上一篇文章,

Android开源库项目集锦

一.兼容类库 ActionBarSherlock : Action Bar是Android 3.0后才開始支持的,ActionBarSherlock是让Action Bar功能支持2.X后的全部平台.并且他会自己主动的推断是调用原生Action Bar还是使用扩展ActionBar. 在我的小熊词典里实用到这个库,并且非常多非常知名的App也在使用这个库.GitHub Official ActionBar科普 Android-ViewPagerIndicator : 这是与ViewPager兼容

直播相关的开源库/项目

RTMP播放相关 FFmpegGitHub所有版本编译脚本脚本 gas-preprocessor FFmpeg-AVPlayer-For-iOS-tvOSGitHub VitamioGitHub PLPlayerKitGitHub kxmovieGitHub ijkplayerGitHub VLCGitHubGitLab SmarterStreamingGitHub rtmp-video-player-for-iosGitHub Eleven PlayerGitHub RTMP推流相关 libr

第五课-Android库项目

由于在开发过程,为了实现未曾了解的某种效果与特定功能,而求助于网上优秀的开源项目,在使用过程中发现引用开源的Library Project(库项目),的确可以解决很多问题,而且也给出了一种思路,好的软件公司也需要有自己的Library Project(库项目),这样不必要进行重复开发工作,这只是自己的想法.下面将自己的心得或体会记录如下,以下是自己的编写风格. 应用场景: 在项目的开发过程中,经常会使用公司内部的公共库或使用优秀的开源项目库,以求达到快速开发.代码复用的效果.所开发的项目中要集成

导入开源库到基于Android Studio构建的项目中

前两天,谷歌发布了Android Studio 1.0的正式版,也有更多的人开始迁移到Android Studio进行开发.然而,网上很多的开源库,控件等还是以前的基于Eclipse进行开发,很多人不知道怎么导入到自己的基于Android Studio项目中来,微博上也有人私信我,让我来写写,正好今天回来的比较早,就写写吧.主要介绍一下常见的一些导包的场景. 前言 --project //项目目录 | build.gradle //项目的gradle配置文件 | settings.gradle

iOS 项目中用到的一些开源库和第三方组件

iOS 项目中用到的一些 iOS 开源库和第三方组件 分享一下我目前所在公司 iOS 项目中用到的一些 iOS 开源库和第三方组件, 感谢开源, 减少了我们的劳动力, 节约了我们大量的时间, 让我们有更多的时间和精力能更加专注的做好自己的产品 用到的组件 1.通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FMDB 本地数据库组件 SDWebImage 多个缩略图缓存组件 UICKeyChainStore 存放用户账号密码组件 Reachability 监

给项目加入SlidingMenu开源库

这篇文章直接开始了项目,这里我们要在我们的项目里面加入开源的SlideMenu来提高我们的开发效率,但是加入开源库的时候会问题,下面是jar引入和问题的解决方法. 1.新建项目 2.到github上下载SlideMenu,并吧Library这个文件夹也就是库文件导入Eclipse.右击工程,在properties里面把库引入到工程中. 3.这时候我们会发现控制台出现了一下错误,我们一起来分析和解决这些错误. (1) Found 3 versions of android-support-v4.j