ExpectAnim is a Android Kotlin library which give you support to describe your animation and run with Materialize design. If you’re not familiar with this new Android official language then you can see my some previous post:
Now come with this cool library and firstly you must see the demo which is given above:
1How to implement ExpectAnim in your application
In your module
Maven
<dependency> <groupId>com.github.florent37</groupId> <artifactId>expectanim</artifactId> <version>1.0.3</version> <type>pom</type> </dependency>
Gradle
compile 'com.github.florent37:expectanim:1.0.3'
Ivy
<dependency org='com.github.florent37' name='expectanim' rev='1.0.3'> <artifact name='expectanim' ext='pom' /> </dependency>
This code describe the image above
new ExpectAnim() .expect(avatar) .toBe( bottomOfParent().withMarginDp(16), leftOfParent().withMarginDp(16), width(40).toDp().keepRatio() ) .expect(name) .toBe( toRightOf(avatar).withMarginDp(16), sameCenterVerticalAs(avatar), toHaveTextColor(Color.WHITE) ) .expect(subname) .toBe( toRightOf(name).withMarginDp(5), sameCenterVerticalAs(name), toHaveTextColor(Color.WHITE) ) .expect(follow) .toBe( rightOfParent().withMarginDp(4), bottomOfParent().withMarginDp(12), toHaveBackgroundAlpha(0f) ) .expect(message) .toBe( aboveOf(follow).withMarginDp(4), rightOfParent().withMarginDp(4), toHaveBackgroundAlpha(0f) ) .expect(bottomLayout) .toBe( atItsOriginalPosition() ) .expect(content) .toBe( atItsOriginalPosition(), visible() ) .toAnimation() .setDuration(1500) .start();
2Follow scroll

Use setPercent
to apply modify the current step of the animation
Example with a ScrollView
this.expectAnimMove = new ExpectAnim() .expect(username) .toBe( toRightOf(avatar).withMarginDp(16), sameCenterVerticalAs(avatar), alpha(0.5f) ) .expect(avatar) .toBe( topOfParent(), leftOfParent().withMarginDp(16), scale(0.5f, 0.5f) ) .expect(follow) .toBe( rightOfParent().withMarginDp(16), sameCenterVerticalAs(avatar) ) .expect(backbground) .toBe( height(height).withGravity(Gravity.LEFT|Gravity.START, Gravity.TOP) ) .toAnimation(); scrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { @Override public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { final float percent = (scrollY * 1f) / v.getMaxScrollAmount(); expectAnimMove.setPercent(percent); } });
3Apply directly
Use setNow
to apply directly the transformation
new ExpectAnim() .expect(view) .toBe( outOfScreen(Gravity.BOTTOM) ) .toAnimation() .setNow();
4Reset
Use reset
to return to the initial state of views
expectAnim.reset():
List of expectations
new ExpectAnim() .expect(view) .toBe( //.withMargin(marginPx) //.withMarginDp(margin) //.withMarginDimen(R.dimen.margin) toRightOf(view) toLeftOf(view) belowOf(view) aboveOf(view) atItsOriginalPosition() sameCenterAs(view, horizontal, vertical) sameCenterHorizontalAs(view) sameCenterVerticalAs(view) centerInParent(horizontal, vertical) centerVerticalInParent() centerHorizontalInParent() centerBetweenViews(view1, view2, horizontal, vertical) centerBetweenViewAndParent(otherView, horizontal, vertical, toBeOnRight, toBeOnBottom) topOfParent() rightOfParent() bottomOfParent() leftOfParent() alignBottom(otherView) alignTop(otherView) alignLeft(otherView) alignRight(otherView) outOfScreen(gravitiy) //Gravity.LEFT / Gravity.RIGHT / Gravity.TOP / Gravity.BOTTOM alpha(alpha) sameAlphaAs(otherView) visible() invisible() //.keepRatio() //.withGravity(horizontalGravity, verticalGravity) atItsOriginalScale() scale(scaleX, scaleY) height(height) width(width) sameScaleAs(otherView) sameWidthAs(otherView) sameHeightAs(otherView) toHaveTextColor(textColor) toHaveBackgroundAlpha(alpha) rotated(rotation) vertical(bottomOfViewAtLeft) atItsOriginalRotation() )
Proguard
-keep class com.github.florent37.expectanim.*{ *; } -dontwarn com.github.florent37.expectanim.**
Changelog
In version 1.0.1, it added rotations
In version 1.0.2 , Added flips
rotations
flippedHorizontally()
flippedVertically()
flippedHorizontallyAndVertically()
withCameraDistance(1000f)
And in latest version, it added Alpha 0 force view to be INVISIBLE`
Share your thoughts