Подтвердить что ты не робот

Анимация TextView для увеличения целого числа и остановки в какой-то момент?

У меня есть TextView, показывающий целочисленное значение. Целочисленное значение передается из предыдущего действия, и я хочу добавить приятную анимацию. Я хочу, если, например, значение int равно 73, я хочу, чтобы textView увеличивал показанный номер на 1 до 73, так что это было бы 1-2-3-4-5... и т.д. И т.д. Как я могу это сделать?

4b9b3361

Ответ 1

Вот простая функция для анимации текста textView в соответствии с начальным и конечным значением

public void animateTextView(int initialValue, int finalValue, final TextView textview) {
        DecelerateInterpolator decelerateInterpolator = new DecelerateInterpolator(0.8f);
        int start = Math.min(initialValue, finalValue);
        int end = Math.max(initialValue, finalValue);
        int difference = Math.abs(finalValue - initialValue);
        Handler handler = new Handler();
        for (int count = start; count <= end; count++) {
            int time = Math.round(decelerateInterpolator.getInterpolation((((float) count) / difference)) * 100) * count;
            final int finalCount = ((initialValue > finalValue) ? initialValue - count : count);
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    textview.setText(finalCount + "");
                }
            }, time);
        }
    }

Ответ 2

Лучшим решением, на мой взгляд, является использование этого метода:

public void animateTextView(int initialValue, int finalValue, final TextView  textview) {

    ValueAnimator valueAnimator = ValueAnimator.ofInt(initialValue, finalValue);
    valueAnimator.setDuration(1500);

    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator valueAnimator) {

            textview.setText(valueAnimator.getAnimatedValue().toString());

        }
    });
    valueAnimator.start();

}

Ответ 3

Я думаю, что этот проект в github - это то, что вы хотите: https://github.com/sd6352051/RiseNumber

RiseNumberTextView расширяет TextView и использует ValueAnimator для реализации эффекта увеличения числа.

Ответ 4

попробуйте этот код. Покажите значение приращения с анимацией

public class MainActivity extends Activity implements AnimationListener {
    private TextView textView;
    AlphaAnimation fadeIn, fadeOut;

    private static int count = 0, finalValue = 20;

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

        textView = (TextView) findViewById(R.id.textView);

        fadeIn = new AlphaAnimation(0.0f, 1.0f);
        fadeOut = new AlphaAnimation(1.0f, 0.0f);

        fadeIn.setDuration(1000);
        fadeIn.setFillAfter(true);
        fadeOut.setDuration(1000);
        fadeOut.setFillAfter(true);

        fadeIn.setAnimationListener(this);
        fadeOut.setAnimationListener(this);
        textView.startAnimation(fadeIn);
        textView.startAnimation(fadeOut);

    }   

    @Override
    public void onAnimationEnd(Animation arg0) {
        // TODO Auto-generated method stub

        Log.i("mini", "Count:" + count);

        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                textView.setText("" + count);
            }
        });

        if (count == finalValue) {
            textView.setText("" + finalValue);
        } else {
            ++count;
            textView.startAnimation(fadeIn);
            textView.startAnimation(fadeOut);
        }

    }

    @Override
    public void onAnimationRepeat(Animation arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onAnimationStart(Animation arg0) {
        // TODO Auto-generated method stub

    }

}