Android字符按字符显示文本动画

zeg*_*nus 38 animation android text character

任何人都知道执行动画的任何有效方法,必须做的是逐个字符地显示文本,如:

T
Th
Thi
This
This i
这是
......

等等.

谢谢!

Dev*_*red 100

这可能不是最好的解决方法,但最简单的可能是一个快速的子类TextViewHandler一个更新的文字,每隔一段时间,直到显示完整的序列:

public class Typewriter extends TextView {

    private CharSequence mText;
    private int mIndex;
    private long mDelay = 500; //Default 500ms delay


    public Typewriter(Context context) {
        super(context);
    }

    public Typewriter(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    private Handler mHandler = new Handler();
    private Runnable characterAdder = new Runnable() {
        @Override
        public void run() {
            setText(mText.subSequence(0, mIndex++));
            if(mIndex <= mText.length()) {
                mHandler.postDelayed(characterAdder, mDelay);
            }
        }
    };

    public void animateText(CharSequence text) {
        mText = text;
        mIndex = 0;

        setText("");
        mHandler.removeCallbacks(characterAdder);
        mHandler.postDelayed(characterAdder, mDelay);
    }

    public void setCharacterDelay(long millis) {
        mDelay = millis;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在Activity中使用它,如下所示:

public class MyActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Typewriter writer = new Typewriter(this);
        setContentView(writer);

        //Add a character every 150ms
        writer.setCharacterDelay(150);
        writer.animateText("Sample String");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你想要添加每个字母的一些动画效果,也许可以看看子类化TextSwitcher.

希望有帮助!

  • 当单词不适合当前行时,它会在下一行重写时将其删除.是一种非常讨厌的行为.你有解决方案吗? (2认同)
  • android studio要求我扩展`android.support.v7.widget.AppCompatTextView`。这是为什么 ? (2认同)

小智 15

使用Devunwired的打字机课程

然后,在布局中:

<com.example.fmm.Typewriter
    android:id="@+id/typewriter"
    android:layout_alignParentTop="true"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>
Run Code Online (Sandbox Code Playgroud)

活动中的代码:

Typewriter writer = (Typewriter)findViewById(R.id.typewriter);
        //Add a character every 150ms
        writer.setCharacterDelay(150);
        writer.animateText("Sample String");
Run Code Online (Sandbox Code Playgroud)


Vis*_*nan 9

无需设置额外的课程使用此,这里的电视是您的布局中的文本视图

setCharacterDelay(150);
animateText("Sample String");

private Handler mHandler = new Handler();
private Runnable characterAdder = new Runnable() {
    @Override
    public void run() {
        tv.setText(mText.subSequence(0, mIndex++));
        if(mIndex <= mText.length()) {
            mHandler.postDelayed(characterAdder, mDelay);
        }
    }
};

public void animateText(CharSequence text) {
    mText = text;
    mIndex = 0;

    tv.setText("");
    mHandler.removeCallbacks(characterAdder);
    mHandler.postDelayed(characterAdder, mDelay);

}

public void setCharacterDelay(long millis) {
    mDelay = millis;
}
Run Code Online (Sandbox Code Playgroud)