首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android字符逐字符显示文本动画

Android字符逐字符显示文本动画
EN

Stack Overflow用户
提问于 2011-07-14 21:51:32
回答 10查看 46.4K关注 0票数 42

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

T 这是 这个 这 这个我 这是 ..。

诸若此类。

谢谢!

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2011-07-14 22:29:32

这可能不是最优雅的解决方案,但最简单的解决方案可能是TextView的一个快速子类,它有一个Handler,它每隔一段时间更新文本一次,直到显示完整的序列:

代码语言:javascript
复制
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;
    }
}

然后,您可以在这样的活动中使用它:

代码语言:javascript
复制
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");
    }
}

如果您希望在每个字母中添加一些动画效果,也许可以使用子类TextSwitcher来代替。

希望这能帮上忙!

票数 114
EN

Stack Overflow用户

发布于 2014-06-28 23:18:45

使用Devunwired的打字机类

然后,在布局中:

代码语言:javascript
复制
<com.example.fmm.Typewriter
    android:id="@+id/typewriter"
    android:layout_alignParentTop="true"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>

活动中的代码:

代码语言:javascript
复制
Typewriter writer = (Typewriter)findViewById(R.id.typewriter);
        //Add a character every 150ms
        writer.setCharacterDelay(150);
        writer.animateText("Sample String");
票数 19
EN

Stack Overflow用户

发布于 2013-04-15 18:15:09

不需要设置额外的类使用这个,这里的电视是一个文本视图在您的布局只是调用

setCharacterDelay(150);

animateText(“示例字符串”);

代码语言:javascript
复制
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;
}
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6700374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档