Прокрутка TextView и анимация в Android - PullRequest
2 голосов
/ 26 сентября 2010

Я успешно включил прокрутку для Android TextView, поместив его в ScrollView или, альтернативно, используя TextView setMovementMethod (например, myTextView.setMovementMethod (new ScrollingMovementMethod ());).

Однако, в идеале, я хотел бы видеть прокрутку TextView в моде, похожем на касание IPhone / IPod, где текст переходит и отскакивает назад. В эмуляторе TextView просто прокручивается в начало или конец без какого-либо эффекта анимации.

Есть ли простой способ активировать прокрутку или другой подход, использующий возможности анимации Android и OvershootInterpolator?

Ответы [ 3 ]

2 голосов
/ 07 августа 2013

У меня была такая же проблема, как и у вас.После нескольких часов интенсивных исследований я сделал это:
В вашем XML-макете , у вас есть что-то вроде этого:самая смешная часть:

private TextView mTextView...
private Animation mAnimation...

private void animateTextView() {
    int textWidth = getTextViewWidth(mTextView);
    int displayWidth = getDisplayWidth(mContext);

    /* Start animation only when text is longer than dislay width. */
    if(displayWidth<textWidth) {
        mAnimation = new TranslateAnimation(
                0, displayWidth-textWidth,
                0, 0);
        mAnimation.setDuration(3000);    // Set custom duration.
        mAnimation.setStartOffset(500);    // Set custom offset.
        mAnimation.setRepeatMode(Animation.REVERSE);    // This will animate text back ater it reaches end.
        mAnimation.setRepeatCount(Animation.INFINITE);    // Infinite animation.

        mTextView.startAnimation(mAnimation);
    }
}

private int getDisplayWidth(Context context) {
    int displayWidth;

    WindowManager windowManager = (WindowManager)context.getSystemService(
            Context.WINDOW_SERVICE);
    Display display = windowManager.getDefaultDisplay();
    Point screenSize = new Point();

    if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB_MR2) {
        display.getSize(screenSize);
        displayWidth = screenSize.x;
    } else {
        displayWidth = display.getWidth();
    }

    return displayWidth;
}

private int getTextViewWidth(TextView textView) {
    textView.measure(0, 0);    // Need to set measure to (0, 0).
    return textView.getMeasuredWidth();
}

Эта анимация делает именно то, что вы хотите.

0 голосов
/ 09 января 2016

Для полной прокрутки TextView мы можем отредактировать код, указанный #franta kocourek, следующим образом:

private void animateTextView() {
    int textWidth = getTextViewWidth(txtLastLocation);
    int displayWidth = Device.getDisplayWidth(getContext());

    if((displayWidth)<=textWidth) {
        textViewAnimation = new TranslateAnimation(
                textWidth, -textWidth,
                0, 0);
        textViewAnimation.setDuration(10000); // Set custom duration.
        textViewAnimation.setStartOffset(0);// Set custom offset.
        textViewAnimation.setRepeatMode(Animation.RESTART); // This will animate text back ater it reaches end.
        textViewAnimation.setRepeatCount(Animation.INFINITE); // Infinite animation.

        mTextView.startAnimation(textViewAnimation);
    }
}
0 голосов
/ 08 августа 2013

Похоже, поведение ListView по умолчанию может быть то, что вы хотите. Определите ListView в XML, а затем установите пользовательский адаптер, который передает данные в TextView.

<ListView android:id="@+id/ListView01" 
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content"/>

ListView документы: http://developer.android.com/reference/android/widget/ListView.html

Вы можете видеть, что существует метод OnOverScrolled. По умолчанию должно работать.

...