Я пытаюсь реализовать однострочное текстовое представление, которое будет прокручиваться автоматически. Но, к сожалению, я не могу заставить его работать. AutoScrollTextView объявлен внутри LinearLayout (ширина и высота = fill_parent). Класс в основном использует обработчик, который вызывает себя для прокрутки на заданную сумму. Я упростил код, чтобы показывать только текстовое представление, которое должно прокручиваться на 5 пикселей каждую секунду.
Вывод журнала корректен, метод getScrollX () возвращает соответствующую позицию scrollX.
Если я не позвоню requestLayout()
, ничего не получится. invalidate()
не имеет никакого эффекта.
У кого-нибудь есть подсказка?
public class AutoScrollTextView extends TextView {
public AutoScrollTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setSingleLine();
setEllipsize(null);
setText("Single-line text view that scrolls automatically if the text is too long to fit in the widget");
}
// begin to scroll the text from the original position
public void startScrolling() {
scrollHandler.sendEmptyMessage(0);
}
private Handler scrollHandler = new Handler() {
private static final int REFRESH_INTERVAL = 1000;
public void handleMessage(Message msg) {
scrollBy(5, 0);
requestLayout();
Log.debug("Scrolled to " + getScrollX() + " px");
sendEmptyMessageDelayed(0, REFRESH_INTERVAL);
}
};
}