Desplazamiento horizontal automático de Android TextView
Estoy tratando de implementar una vista de texto de una sola línea que se desplazará automáticamente. Pero lamentablemente no puedo conseguir que funcione. El AutoScrollTextView se declara dentro de un LinearLayout (anchura y altura = fill_parent). La clase básicamente utiliza un manejador que se llama a desplazarse por una cantidad determinada. He simplificado el código para mostrar sólo una vista de texto que debe desplazarse en 5 píxeles cada segundo.
La salida del registro es correcta, el método getScrollX () devuelve la posición scrollX apropiada.
- Cómo hacer que TextView se desplace en Android
- Android setMovementMethod en un TextView dentro de un ListView
- Deteniendo texto de división a varias líneas en los períodos en direcciones web
- Error de estilo de texto de Android: el recurso no es un ColorStateList
- Cambiar el color de fondo de un TextView cuando se hace clic
Si no llamo requestLayout()
, nada se dibuja. invalidate()
no tiene efecto.
¿Alguien tiene una pista?
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); } }; }
- Cómo mostrar el valor de una variable en la pantalla
- TextView y Ellipsize cuando es apretado por otro TextView
- Android enlaza sin primer carácter
- Actualización de Android TextView en subprocesos y ejecución
- ¿Por qué obtengo NullPointerException cuando uso setCurrentText o setText para TextSwitcher?
- Android define el color de fondo en TextView en styles.xml
- TextViews en la parte superior e inferior, el espacio restante lleno de ListView
- Indentación de Android y sangría de sangría
Si no necesita subclase de TextView
, puede probar esto en el archivo de diseño:
<TextView android:text="Single-line text view that scrolls automatically if the text is too long to fit in the widget" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit ="marquee_forever" android:focusable="true" android:focusableInTouchMode="true" android:scrollHorizontally="true" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
Además, en su código utilice lo siguiente:
findViewById(R.id.serviceColorCode).setSelected(true);
[Respuesta editada basada en comentarios]
Mi solución funciona:
<TextView android:id="@+id/titolotxt" android:layout_width="..." android:layout_height="..." android:ellipsize="marquee" android:gravity="left" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:text="@string/titolo"/>
Y el TextView
tiene que ser setted seleccionado: textView.setSelected(true);
Por código en onCreate
por ejemplo.
Después de este código xml como contestado por @rajat
<TextView android:text="Single-line text view that scrolls automatically if the text is too long to fit in the widget" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit ="marquee_forever" android:focusable="true" android:focusableInTouchMode="true" android:scrollHorizontally="true" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
Necesitamos establecer
TextView tv=(TextView)findViewById(R.id.textview1); tv.setSelected(true);
Que finalmente hizo que mi trabajo
A veces invalidate no funcionará hasta que usted llama invalidate en el hilo principal como sigue:
handler.post(new Runnable() { @Override public void run() { yourView.invalidate(); } });
// this TextView will marquee because it is selected TextView marqueeText1 = (TextView) findViewById(R.id.marquee_text_1); marqueeText1.setSelected(true); <TextView android:id="@+id/marquee_text_1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit." android:textSize="24sp" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" />
- La forma correcta de reproducir sonidos cortos Android?
- Java.lang.ClassNotFoundException después de cambiar nada en el proyecto, pero actualizar eclipse android sdk