2010-08-10 11 views
30

Jak wyświetlić migający tekst w systemie Android.Miga tekst w widoku z Androidem

Dziękuję wszystkim.

+0

Czy próbowałeś zmienić kolor tekstu w każdej sekundzie na przykład? ponieważ nie sądzę, że można to zrobić w ramach. a może możesz użyć widoku WWW z tagiem blink ... – Sephy

+0

możesz utworzyć wątek, który przełącza widoczność textView pomiędzy View.VISIBLE a View.INVISIBLE –

+0

Właściwie nie sądzę, że można zrobić WebView, jak sugerował Sephy; Webkit nie wyświetla tagu (przynajmniej w Chrome). Ponieważ irytująco mrugający tekst na twoich użytkownikach jest naprawdę złym sposobem na zwrócenie ich uwagi, a oni cię za to nie polubią. –

Odpowiedz

11

Utwórz animację widoku dla niego. Możesz zrobić zanikanie alfa od 100% do 0% w ciągu 0 sekund i ponownie w cyklu. W ten sposób system Android radzi sobie z nim inteligentnie i nie musisz mieć problemów z gwintowaniem i marnowaniem procesora.

Więcej na animacje tutaj:
http://developer.android.com/reference/android/view/animation/package-summary.html

Tutorial:
http://developerlife.com/tutorials/?p=343

+0

jaki jest najlepszy sposób, aby tekst migał? –

26

Właściwie istnieje pisanka blink tag w tym ICS! :) Naprawdę nie polecam korzystania z tego - był NAPRAWDĘ rozbawiony, aby znaleźć go w źródle!

<blink xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="I'm blinking" 
     /> 
</blink> 
+0

Nie działa dla mnie: 'E/AndroidRuntime (19645): Spowodowane przez: android.view.InflateException: Binarna linia plików XML nr 9: Błąd pompowania klasy blink' –

+0

Nie jest to udokumentowane - znalazłem to przez ICS nurkowania ze źródeł. Wygląda na to, że zmiana została wprowadzona 05-17-2011. Nie wiem, który numer SDK też mapuje. –

+1

Aha, a jeśli to nie było oczywiste - jestem prawie pewien, że tag "mrugnięcie" to pisanka. Nie sugeruję, że to właściwe rozwiązanie! :) –

5

To można zrobić dodając ViewFlipper że na przemian dwa TextView i Fadein i Fadeout animacja może być zastosowany, gdy przełącznik.

Układ pliku: Kod

<ViewFlipper android:id="@+id/flipper" android:layout_width="fill_parent" android:layout_height="wrap_content" android:flipInterval="1000" > 

<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="TEXT THAT WILL BLINK"/> 

<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="" /> 

</ViewFlipper> 

aktywny:

private ViewFlipper mFlipper; 
mFlipper = ((ViewFlipper)findViewById(R.id.flipper)); 
mFlipper.startFlipping(); 
mFlipper.setInAnimation(AnimationUtils.loadAnimation(getApplicationContext(), android.R.anim.fade_in)); 
mFlipper.setOutAnimation(AnimationUtils.loadAnimation(getApplicationContext(), android.R.anim.fade_out)); 
96

Można to wykorzystać:

TextView myText = (TextView) findViewById(R.id.myText); 

Animation anim = new AlphaAnimation(0.0f, 1.0f); 
anim.setDuration(50); //You can manage the time of the blink with this parameter 
anim.setStartOffset(20); 
anim.setRepeatMode(Animation.REVERSE); 
anim.setRepeatCount(Animation.INFINITE); 
myText.startAnimation(anim); 

nadzieję, że to pomaga!

+1

naprawdę proste i Naprawdę przydatna –

+2

Kopiuj i wklej i bingo! Dziękuję za udostępnienie tego! –

5

Używanie wątków w kodzie zawsze powoduje straty czasu procesora i zmniejsza wydajność aplikacji. Nie powinieneś używać nici przez cały czas. Użyj, jeśli to konieczne.

Wykorzystanie XML Animacje do tego celu:

R.anim.blink

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <alpha android:fromAlpha="0.0" 
     android:toAlpha="1.0" 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:duration="600" 
     android:repeatMode="reverse" 
     android:repeatCount="infinite"/> 
</set> 

aktywny Blink: używać go tak: -

public class BlinkActivity extends Activity implements AnimationListener { 

    TextView txtMessage; 
    Button btnStart; 

    // Animation 
    Animation animBlink; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_blink); 

     txtMessage = (TextView) findViewById(R.id.txtMessage); 
     btnStart = (Button) findViewById(R.id.btnStart); 

     // load the animation 
     animBlink = AnimationUtils.loadAnimation(getApplicationContext(), 
       R.anim.blink); 

     // set animation listener 
     animBlink.setAnimationListener(this); 

     // button click event 
     btnStart.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       txtMessage.setVisibility(View.VISIBLE); 

       // start the animation 
       txtMessage.startAnimation(animBlink); 
      } 
     }); 

    } 

    @Override 
    public void onAnimationEnd(Animation animation) { 
     // Take any action after completing the animation 

     // check for blink animation 
     if (animation == animBlink) { 
     } 

    } 

    @Override 
    public void onAnimationRepeat(Animation animation) { 

    } 

    @Override 
    public void onAnimationStart(Animation animation) { 

    } 

} 

Niech mnie wiem, jeśli masz jakiekolwiek pytania ..

+0

jak mogę sprawić, żeby migało 3 kolorami z góry dzięki! –

+0

@ We'reAllMadHere Proponuję użyć Value Animator do tego zadania, Jest bardzo Łatwy w użyciu, łatwy do użycia, http://stackoverflow.com/questions/15582434/using-a-valueanimator-to-make-a-extext-blink-different-colors –

+0

Jest to bardzo jasny sposób na zrobienie tego, ale animuje cały TextView, w tym jego kolor tła, jeśli nie jest przezroczysty. Czy istnieje sposób, aby migać tylko "tekst" wewnątrz "TextView" –

0
If you want to make text blink on canvas in bitmap image so you can use this code 
we have to create two methods 
So first, let's declare a blink duration and a holder for our last update time: 
private static final int BLINK_DURATION = 350; // 350 ms 
private long lastUpdateTime = 0; private long blinkStart=0; 

teraz tworzyć metoda

public void render(Canvas canvas) { 
    Paint paint = new Paint(); 
    paint.setTextSize(40); 
    paint.setColor(Color.RED); 
    canvas.drawBitmap(back, width/2 - back.getWidth()/2, height/2 
      - back.getHeight()/2, null); 
    if (blink) 
     canvas.drawText(blinkText, width/2, height/2, paint); 
} 

Teraz stworzyć metody aktualizacji migać

public void update() { 
if (System.currentTimeMillis() - lastUpdateTime >= BLINK_DURATION 
     && !blink) { 
    blink = true; 
    blinkStart = System.currentTimeMillis(); 
} 
if (System.currentTimeMillis() - blinkStart >= 150 && blink) { 
    blink = false; 
    lastUpdateTime = System.currentTimeMillis(); 
} 

} 

teraz działać dobrze

Powiązane problemy