2013-03-11 12 views
7

Ho un Activity che funge da lettore musicale. All'avvio, un oggetto MediaPlayer viene inizializzato e avviato. Nel layout, ho TextViews per visualizzare l'artista e il titolo. Questi valori (recuperati dal server) possono essere lunghi, quindi ho aggiuntoandroid - problema con lo scorrimento automatico in TextView

android:ellipsize="marquee" 
    android:marqueeRepeatLimit="marquee_forever" 
    android:scrollHorizontally="true" 

per far scorrere il testo. C'è uno strano problema: quando premo il pulsante "pause", lo TextViews sta scorrendo, ma mentre la musica è in riproduzione non scorre. Qualche idea?

P.S. Aggiorno il SeekBar ogni 500 ms utilizzando un Runnable, il problema potrebbe essere correlato a questo?

Ecco il mio layout:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#000000" 
android:gravity="center_vertical" 
tools:context=".MainActivity" > 

<LinearLayout 
    android:id="@+id/main_header" 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:layout_alignParentTop="true" 
    android:orientation="horizontal" > 
</LinearLayout> 

<ImageView 
    android:id="@+id/imgCoverArt" 
    android:layout_width="150dp" 
    android:layout_height="150dp" 
    android:layout_below="@+id/main_header" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="15dp" 
    android:layout_marginTop="20dp" 
    android:src="@drawable/cover_default" /> 

    <SeekBar 
    android:id="@+id/seekBarMain" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/imgCoverArt" 
    android:layout_marginLeft="20dp" 
    android:layout_marginRight="20dp" 
    android:layout_marginTop="10dp" 
    android:paddingLeft="9dp" 
    android:paddingRight="9dp" 
    android:progressDrawable="@drawable/pb" 
    android:thumb="@drawable/pbhead" /> 

<TextView 
    android:id="@+id/tvArtist" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/seekBarMain" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="35dp" 
    android:ellipsize="marquee" 
    android:marqueeRepeatLimit="marquee_forever" 
    android:scrollHorizontally="true" 
    android:singleLine="true" 
    android:text="Large Text" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:textColor="#FFFFFF" /> 

<TextView 
    android:id="@+id/tvTitle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/tvArtist" 
    android:layout_centerHorizontal="true" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="5dp" 
    android:ellipsize="marquee" 
    android:marqueeRepeatLimit="marquee_forever" 
    android:scrollHorizontally="true" 
    android:singleLine="true" 
    android:text="Medium Text" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:textColor="#FFFFFF" /> 



<TextView 
    android:id="@+id/tvTimeElapsed" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/seekBarMain" 
    android:layout_alignLeft="@+id/seekBarMain" 
    android:layout_marginBottom="-10dp" 
    android:text="02:54" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:textColor="#FFFFFF" /> 

<TextView 
    android:id="@+id/tvTotalTime" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/seekBarMain" 
    android:layout_alignRight="@+id/seekBarMain" 
    android:layout_marginBottom="-10dp" 
    android:text="05:45" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:textColor="#FFFFFF" /> 

<LinearLayout 
    android:id="@+id/LinearLayout1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="10dp" 
    android:gravity="center_horizontal" 
    android:orientation="horizontal" > 

    <Button 
     android:id="@+id/btnPrevious" 
     android:layout_width="100dp" 
     android:layout_height="40dp" 
     android:layout_gravity="center_vertical" 
     android:layout_marginRight="6dp" 
     android:background="@drawable/prev_btn_state" /> 

    <Button 
     android:id="@+id/btnPlay" 
     android:layout_width="80dp" 
     android:layout_height="80dp" 
     android:layout_gravity="center_vertical" 
     android:background="@drawable/button_play" /> 

    <Button 
     android:id="@+id/btnNext" 
     android:layout_width="100dp" 
     android:layout_height="40dp" 
     android:layout_gravity="center_vertical" 
     android:layout_marginLeft="3dp" 
     android:background="@drawable/next_btn_state" /> 
</LinearLayout> 

</RelativeLayout> 
+0

Ciao Droidman, sto affrontando lo stesso problema. Hai trovato una soluzione per questo? –

risposta

2
<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"/> 

Aggiungi il tuo TextView,

  android:focusable="true" 
      android:focusableInTouchMode="true" 

è necessario per scorrere automaticamente.

Altri esempi ci sono in GitHub.

https://github.com/FireZenk/FireZenk-s-TickerText

https://github.com/kaeppler/ignition/blob/master/ignition-core/ignition-core-lib/src/com/github/ignition/core/widgets/ScrollingTextView.java

Spero che questo vi aiuterà.

+0

provato, nulla è cambiato. In realtà il testo inizia a scorrere automaticamente, ma solo quando la riproduzione è in pausa e la seekBar non viene aggiornata. E per quanto ne so, solo una vista può essere focalizzata in un singolo momento, ma in alcuni casi ho bisogno di TextView per scorrere automaticamente. Altre idee? – Droidman

+0

hai provato https://github.com/FireZenk/FireZenk-s-TickerText? –

+0

ho dato un'occhiata alla fonte, sto avendo dei dubbi dal momento che la cosa usa un Runnable e ne uso già uno e un paio di altre cose .. (solo considerazioni sulla gestione della memoria, il mio giocatore verrà promosso come "leggero e efficiente"). Lasciamo questo come opzione, grazie – Droidman

0

Si può provare questo in voi il metodo onCreate.

yourTexView.setMovementMethod(new ScrollingMovementMethod()); 

Ho anche affrontato esattamente lo stesso problema. Risolto in questo modo.

Problemi correlati