одушевленные текстовые буквы - PullRequest
2 голосов
/ 06 января 2011

подскажите, как анимировать буквы в текстовой строке? Например, для строки «Hello World» сначала масштабируйте H от 0 до size, затем e, затем l и т. Д.? как прыгающий текстовый эффект, если вы понимаете, о чем я.

И я бы хотел, чтобы первая буква в строке была другого цвета.

Я знаю, как анимировать весь вид или рисовать текст на холсте, но таким образом можно анимировать всю текстовую строку, а не буквы.

Ответы [ 3 ]

1 голос
/ 16 января 2011

нашел простой способ, используя два элемента управления TextView. Первый устанавливается на первый последний слова с помощью mytext.substring (0,1), а второй на mytext.substring (1).

когда запускаете startAnimation для обоих или у вас может быть одна анимация для первого просмотра и другая для второго.

в файле макета, я помещаю их рядом с RelativeLayout:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/MainLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView
        android:id="@+id/txtCaption"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="80dp"
        android:textColor="#FFFFFF"
        android:text="est"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        />

    <TextView
        android:id="@+id/txtCaptionFirstLetter"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="70dp"
        android:textColor="#00FF00"
        android:textStyle="bold"
        android:text="T" 
        android:layout_toLeftOf="@+id/txtImageCaption" 
        android:layout_alignBottom="@+id/txtImageCaption"
        />
</RelativeLayout>
1 голос
/ 06 января 2011

Я знаю, что это, вероятно, не лучшее решение, но здесь мы идем. Поскольку вы не можете добавить ничего, кроме текста, скажем, textView. Вам нужно вставить CharSequence, вы должны взглянуть на SpannableString.

Отображение смайликов в Android

Учитывая приведенный выше вопрос, вы можете добавить тег Html к каждой букве, используя некоторые стили CSS. Затем, используя fromHtml, вы можете преобразовать его и поместить в текстовое представление.

0 голосов
/ 03 мая 2016

Это работает:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
protected void onResume() {
    super.onResume();
    Animator anim = bouncingStringIntoViewGroup((ViewGroup)findViewById(R.id.bouncer), Color.RED, 30, "A bouncy string.", 3000);
    //here you can add a another listener to anim if you want (a listener could manipulate the views by set ids).
    anim.start();
}

private Animator bouncingStringIntoViewGroup(ViewGroup bouncingTextContainer, final int firstLetterColor, final float size, final String vls, int duration){
    Context context = bouncingTextContainer.getContext();
    final FrameLayout textViewHolder = new FrameLayout(context);
    final TextView textView = new TextView(context);
    final TextView helper = new TextView(context);
    textViewHolder.addView(helper, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    textViewHolder.addView(textView);

    final int length = vls.length();
    SpannableString textViewString = new SpannableString(vls);
    textViewString.setSpan(new ForegroundColorSpan(Color.TRANSPARENT), 0, length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    SpannableString helperString = new SpannableString(vls);
    helperString.setSpan(new ForegroundColorSpan(Color.TRANSPARENT), 1, length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    helperString.setSpan(new ForegroundColorSpan(firstLetterColor), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setTextSize(size);
    helper.setTextSize(0);
    helper.setText(helperString);
    setupCreatedViews(bouncingTextContainer, textViewHolder, textView, helper);

    final int intSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, size, getResources().getDisplayMetrics());
    final int stepDuration = duration/length;
    ObjectAnimator anim = ObjectAnimator.ofFloat(helper, "textSize", 0, size).setDuration(stepDuration);
    anim.setRepeatCount(length);
    anim.addListener(new Animator.AnimatorListener() {
        int at = 1;
        @Override
        public void onAnimationStart(Animator animation) {}

        @Override
        public void onAnimationEnd(Animator animation) {}

        @Override
        public void onAnimationCancel(Animator animation) {}

        @Override
        public void onAnimationRepeat(Animator animation) {
            SpannableString textViewString = new SpannableString(vls);
            textViewString.setSpan(new ForegroundColorSpan(firstLetterColor), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            textViewString.setSpan(new ForegroundColorSpan(Color.TRANSPARENT), at, length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            textView.setText(textViewString);
            helper.setTextSize(0);
            SpannableString helperString = new SpannableString(vls);
            helperString.setSpan(new ForegroundColorSpan(Color.TRANSPARENT), 0, at, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            helperString.setSpan(new TextAppearanceSpan(null, 10, intSize, null, null), 0, at, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            if(at!=length) helperString.setSpan(new ForegroundColorSpan(Color.TRANSPARENT), at + 1, length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            helper.setText(helperString);
            at++;
        }
    });
    return anim;
}

private void setupCreatedViews(ViewGroup containerForAnimatedText, FrameLayout subcontainer, TextView textView, TextView textViewFadeinLetter){
    containerForAnimatedText.addView(subcontainer, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    //here you can set colors, ids, padding etc...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...