使用SpannableString实现一个load小动画

本文介绍了一个基于SpannableString实现的加载动画——WaitingDots。该项目通过DotsTextView和JumpingSpan类来创建动画效果,只需在MainActivity中简单引入布局即可实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

依旧是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;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值