依旧是github开源项目:WaitingDots
这个项目代码不多,实现的很简单,但是很有意思因为动画的基本元素不是画出来的,而是使用了spannableString来实现。
- DotsTextView.java
- JumpingSpan.java
- MainActivity.java
DotstextView是动画的实现主体。
JumpingSpan是基本元素,是动画中的插件
MainActivity中只要在布局中引入DotsTextView即可。
以下是分割线,show code:
package pl.tajchert.sample;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.FontMetricsInt;
import android.text.style.ReplacementSpan;
/* ReplacementSpan真是一个挺神奇的东西,在官方api上介绍甚少
*几个主要功能函数也是do nothing.
* 本例中自定义的translationX,translationY没有发挥作用。如果给两个变量赋值
* 那么第一个JumpingSpan距离前面元素距离增大,这里这样使用是为了让每个"."为一个单独的单元进行独立操作
*/
public class JumpingSpan extends ReplacementSpan {
private float translationX = 0;
private float translationY = 0;
@Override
public int getSize(Paint paint, CharSequence text, int start, int end, FontMetricsInt fontMetricsInt) {
return (int) paint.measureText(text, start, end);
}
@Override
public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
canvas.drawText(text, start, end, x + translationX, y + translationY, paint);
}
public void setTranslationX(float translationX) {
this.translationX = translationX;
}
public void setTranslationY(float translationY) {
this.translationY = translationY;
}
}
package pl.tajchert.sample;
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.TypeEvaluator;
import android.animation.ValueAnimator;