2010-08-10 66 views
30

Come visualizzare Testo lampeggiante in Android.Testo lampeggiante in visualizzazione Android

Grazie a tutti.

+0

Hai provato cambiando il colore del testo ogni secondo per esempio? perché non credo che si può fare con il quadro. o forse è possibile utilizzare una WebView con un tag batter ... – Sephy

+0

si potrebbe creare un thread che alterna la visibilità del textView tra il View.VISIBLE e Vista.INVISIBILE –

+0

In realtà, non penso che tu possa fare una WebView come suggerito da Sephy; Webkit non esegue il rendering del tag (almeno in Chrome). Perché il testo fastidiosamente lampeggiante dei tuoi utenti è un modo davvero brutto per attirare la loro attenzione, e non gli piacerà per questo. –

risposta

11

Creare un'animazione vista per esso. È possibile eseguire una dissolvenza alfa dal 100% allo 0% in 0 secondi e viceversa in un ciclo. In questo modo, Android lo gestisce in modo intelligente e non devi rovinare tutto con threading e sprecare CPU.

Maggiori info su animazioni qui:
http://developer.android.com/reference/android/view/animation/package-summary.html

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

+0

qual è il modo migliore per mantenere il testo lampeggiante? –

26

In realtà c'è un tag batter uovo di Pasqua per questo in ICS! :) In realtà non consiglio di usarlo - è stato DAVVERO divertito a trovarlo nella fonte, però!

<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

Non ha funzionato per me: 'E/AndroidRuntime (19645): Causato da: android.view.InflateException: riga di file XML binario n. 9: Errore di gonfiaggio della classe lampeggiante –

+0

Non è documentato: l'ho trovato per ICS di immersione sorgente. Sembra che il cambiamento sia stato introdotto il 05-17-2011. Non sono sicuro quale numero SDK che mappa anche. –

+1

Oh, e se questo non fosse ovvio, sono abbastanza sicuro che il tag "blink" è un uovo di Pasqua. Non sto seriamente suggerendo che è la soluzione giusta! :) –

5

può essere fatto aggiungendo un ViewFlipper che alterna due TextViews e fadeIn e Fadeout animazione può essere applicato quando commutano.

layout del file: Codice

<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> 

attività:

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

È possibile utilizzare questo:

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); 

Spero che questo aiuti!

+1

davvero semplice e veramente utile –

+2

Copia-incolla e bingo! Grazie per aver condiviso questo! –

5

utilizzando thread nel codice spreca sempre tempo di CPU e diminuisce le prestazioni dell'applicazione. Non dovresti usare i thread tutto il tempo. Utilizzare se ovunque necessario.

Usa animazioni XML per questo scopo:

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> 

Blink attività: usare in questo modo: -

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) { 

    } 

} 

me Let sapere se avete domande ..

+0

come posso farlo lampeggiare con 3 colori grazie in anticipo! –

+0

@ We'reAllMadHere Ti suggerirei di usare Value Animator per questo compito, è molto facile da usare http://stackoverflow.com/questions/15582434/using-a-valueanimator-to-make-a-textview-blink-different-colors –

+0

Questo è un modo molto chiaro per farlo ma anima il intero TextView compreso il suo colore di sfondo se non trasparente. C'è un modo per lampeggiare solo il 'testo' all'interno di' 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; 

ora creare metodo

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); 
} 

Ora creare metodo di aggiornamento a lampeggiare

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(); 
} 

} 

Ora funzionano bene

Problemi correlati