This animation happens when the user changes the color of the note. It is a subtle animation, but adds a nice polish to the UI.
This is a very simple animation that slowly changes from color A to color B over a time interval. This animation can be found in the BackgroundAnimator class inside the common library.
BackgroundAnimator
/**
* A helper class to help with background drawable animators
*/
public class BackgroundAnimatorHelper {
/**
* Animate a transition from one color to the next.
*
* @param view
* The view to animate.
* @param fromColor
* the initial color for the animation.
* @param toColor
* the final color for the animation.
* @param duration
* The time in milliseconds for the animation.
* @param animatorListener
* The listener for the animation.
*/
public static void crossBlendColors(@NonNull View view, int fromColor, int toColor,
int duration, Animator.AnimatorListener animatorListener) {
view.animate().cancel();
ObjectAnimator animator = ObjectAnimator
.ofObject(view, "backgroundColor", new ArgbEvaluator(), fromColor, toColor);
if (animatorListener != null) {
animator.addListener(animatorListener);
}
animator.setDuration(duration);
animator.start();
}
/**
* Animate a transition from one color resource to the next.
*
* @param view
* The view to animate.
* @param fromColorResource
* the initial color resource for the animation.
* @param toColorResource
* the final color resource for the animation.
* @param duration
* The time in milliseconds for the animation.
* @param animatorListener
* The listener for the animation.
*/
public static void crossBlendColorResource(@NonNull View view, int fromColorResource,
int toColorResource, int duration,
Animator.AnimatorListener animatorListener) {
Resources resources = view.getResources();
int fromRgb = resources.getColor(fromColorResource);
int toRgb = resources.getColor(toColorResource);
crossBlendColors(view, fromRgb, toRgb, duration, animatorListener);
}
There are two methods here, but the meat of the animation is here:
public static void crossBlendColors(@NonNull View view, int fromColor, int toColor,
int duration, Animator.AnimatorListener animatorListener) {
view.animate().cancel();
ObjectAnimator animator = ObjectAnimator
.ofObject(view, "backgroundColor", new ArgbEvaluator(), fromColor, toColor);
if (animatorListener != null) {
animator.addListener(animatorListener);
}
animator.setDuration(duration);
animator.start();
}
All this method does is create an ObjectAnimator with the ArgbEvaluator. The ArgEvaluator is a special interpolator that does the work of the color shift. All the animator does is use the ArgbEvalauator to change the background color.
The other method, crossBlendColorResources, is a convenience method that figures out the argb value for a color resource and then called the crossBlendColors method to perform the color shift.
Commits
These changes can be found at commits https://github.com/fsk-software/mynotes/commit/a0632503c5fabf74a31cca091d7975419d002328 and https://github.com/fsk-software/mynotes/commit/ec427c6a5684220836f823824d58a61cd2aea47b.
No comments :
Post a Comment