2012-10-23 3 views
1

J'écris une application Android comme un nombre de roues. J'ai utilisé TextSwitcher et une boucle pour changer le texte. Il est supposé que chaque nombre dans la boucle va glisser de gauche à droite. Mais le résultat n'est pas comme prévu. Seul le dernier numéro glisse, il semble qu'aucun numéro ne soit glissé. Quelqu'un peut-il aider avec ceci? Est-ce lié à la mise à jour de l'interface utilisateur?TextSwitcher setText dans une boucle ne fonctionne pas correctement?

Voici mes codes.

package net.pixelstech.counter; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.app.Activity; 
import android.graphics.Color; 
import android.view.Gravity; 
import android.view.Menu; 
import android.widget.TextSwitcher; 
import android.widget.TextView; 
import android.widget.ViewSwitcher; 
import android.view.View; 

public class MainActivity extends Activity implements ViewSwitcher.ViewFactory{ 
private TextSwitcher mSwitcher; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mSwitcher=(TextSwitcher)findViewById(R.id.count_id); 
    mSwitcher.setFactory(this); 

    mSwitcher.setInAnimation(this,android.R.anim.slide_in_left); 
    mSwitcher.setOutAnimation(this,android.R.anim.slide_out_right); 

    GeneralCountAsyncTask cat=new GeneralCountAsyncTask(); 
    cat.execute(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

@Override 
public View makeView() { 
    TextView t = new TextView(this); 
    t.setGravity(Gravity.CENTER | Gravity.CENTER_HORIZONTAL); 
    t.setTextSize(70); 
    t.setTextColor(Color.RED); 
    return t; 
} 

private void startAnimate(final int from,final int to){ 
    for(int i=from;i<to;++i){ 
     mSwitcher.setText(String.valueOf(i)); 
    } 
} 

public class GeneralCountAsyncTask extends AsyncTask<Void,String,Void>{ 
    @Override 
    protected Void doInBackground(Void...v){ 
     while(true){ 
      try { 
       publishProgress(""); 
       Thread.sleep(5000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    @Override 
    protected void onProgressUpdate(String...values){ 
     startAnimate(1,3); 
    } 
} 
} 

Voici le xml J'utilise:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 
<TextSwitcher android:id="@+id/count_id" 
    android:layout_width="fill_parent" 
    android:layout_height="80dip" 
    android:layout_gravity="center" 
> 
</TextSwitcher> 

quelqu'un Hope peut vous aider. Je vous remercie.

Répondre

-1

Avez-vous essayé de placer l'animation de la diapositive juste avant la diapositive? J'ai essayé une animation de fondu avec l'image et le commutateur de texte et ai fait face à un problème semblable.

+0

Oui, j'ai essayé ça. Le même résultat – PixelsTech

Questions connexes