Android-Zeichen für Zeichen zeigen Textanimationen an


Answers

Verwenden Sie die Schreibmaschinen-Klasse von Devunwired

dann im Layout:

<com.example.fmm.Typewriter
    android:id="@+id/typewriter"
    android:layout_alignParentTop="true"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>

Code in der Aktivität:

Typewriter writer = (Typewriter)findViewById(R.id.typewriter);
        //Add a character every 150ms
        writer.setCharacterDelay(150);
        writer.animateText("Sample String");
Question

Jeder kennt eine effiziente Methode, um eine Animation auszuführen, die nur einen Text, Zeichen für Zeichen, anzeigen muss:

T
Th
Thi
Dies
Das ich
Das ist
...

und so weiter.

Vielen Dank!




Diese neue Kopie für Devunwired mit XML-Layout

    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;
    }
}

Code verwenden

        textView = (Typewriter)findViewById(R.id.textView1);
    //Add a character every 150ms
    textView.setCharacterDelay(150);
    textView.animateText("Sample String");

Definieren Sie dann textView in classStart




In der Theorie wäre es

string text = "hello"
string temp = "h"
iterate: temp += if (text.length > temp.length) text[temp.length]; wait

Sie werden natürlich die iterate in Ihrem Runmethod ausführen.