ViewsFrom
来源:互联网 发布:java面试简历免费下载 编辑:程序博客网 时间:2024/05/01 22:33
ViewsFrom
ViewsFrom is an android librarie that allows you to easily find and animate child views from one or multiple ViewGroups using their tag, type, visibility and much more. This librairie is Android 14+ compatible.
Installation
Gradle
repositories { maven { url "https://jitpack.io" }}
compile 'com.github.jaouan:viewsfrom:1.0.0'
Usage
Use Views class as entry point, and let the librarie guides you.
First example : Animate all visible views from rootView.
Views.from(rootView) .withVisibility(View.VISIBLE) .animateWith(context, R.anim.my_awesome_animation) .start();
Second example : Show all EditText with tags "example" from two group views.
Views.from(myFirstLinearLayout, mySecondLinearLayout) .withType(EditText.class) .withTag("example") .forEach((view, index, count) -> { view.setVisibility(View.VISIBLE); });
A bit more complete example that shows what you can do :
// Defines root views of your views finder.Views.from(groupView1 /*, groupView2, ...*/) // Basics filters. .withTag("abc" /*, "efg", ...*/) .withTagRegex("[a-z]*" /*, "anotherRegex", ...*/) .withId(R.id.my_wonderful_id, /*, R.id.my_another_id, ...*/) .withType(TextView.class /*, EditText.class, ...*/) .withVisibility(View.GONE /*, View.INVISIBLE, ...*/) // Negate "with*" filters by prefixing with "not" method. not().withId(R.id.one_more_id /*, R.id.gimme_more_id*/) // Custom filter. .filteredWith((view) -> { return /* your own filter */; }) // Exclude views. .excludeView(myView1 /*, myViews2, ... */) // Options. .includingFromViews() .excludingChildsFromFilteredGroupViews() // Concate with a new views finder, with its own filters and options. .andFrom(group2) .withTag("xyz") // Order views. .orderedBy((view1, view2) -> { return /* your own comparator */; } // And animate them all ! .animateWith(context, R.anim.my_awesome_animation) .withDelayBetweenEachChild(250) .withViewsVisibilityBeforeAnimation(View.INVISIBLE) .withEndAction(() -> { Log.i("ViewsFromLibExample", "It's finally over."); }) .start();
You have 3 end points : Find, iterate and animate.
Find
Returns a views list.
Views.from(groupView) .find();
Iterate
Iterates all views.
Views.from(groupView) .forEach((view, index, count) -> {});
Animate
Views.from(groupView) .animateWith(() -> { return /* your animation instance */; }) // or // .animateWith(context, R.anim.my_awesome_animation) .withDelayBetweenEachChild(250) .withViewsVisibilityBeforeAnimation(View.INVISIBLE) .withEndAction(() -> {}) .start();
Views animator
If you know which views has to be animated, you can still use ViewsAnimator as below :
new ViewsAnimator(context, viewsIWantToAnimate, R.anim.my_smooth_animation) .withDelayBetweenEachChild(250) .withViewsVisibilityBeforeAnimation(View.INVISIBLE) .withEndAction(() -> {}) .start();
ViewsAnimator's start() method can be called multiple times if you want.
// First call.ViewsAnimator viewsAnimator = Views.from(groupView) .animateWith(context, R.anim.my_awesome_animation) .start();// Second call.myButton.setOnClickListener((view) -> { viewsAnimator.start();});
- ViewsFrom
- jpa配置文件借鉴
- 动态二级菜单
- 【UML】颗粒归仓--再谈UML
- 一天一条Linux指令-lsb_release
- linux系统下mysql安装过程中遇到的问题与解决方法
- ViewsFrom
- 开启mysql日志
- C#:NameValueCollection
- Jfinal freemarker
- 基于HttpClient4.5.1实现Http访问工具类
- 使用BigDecimal(在java中怎么计算货币值)
- Android Layout 属性大全
- 关于我最喜爱的MBP
- VMvare12中安装开源linux系统CentOS6.3_32位+处理器不支持虚拟化(此主机不支持Intel VT-x)+两个IOS组成一个完整系统镜像