75

Guys i have a textview which i need it to be blinking please help me with it.

<TextView 
       android:id="@+id/usage"
       android:layout_marginTop="220dip"
       android:layout_marginLeft="45dip"
       android:layout_marginRight="15dip"
       android:typeface="serif"            
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Google "
       android:textColor="#030900"/>

I want the google text to be blinking

Pratik Butani
  • 60,504
  • 58
  • 273
  • 437
Goofy
  • 6,098
  • 17
  • 90
  • 156

11 Answers11

247

You can use this:

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

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

It's the same answer I gave in this post Blinking Text in android view

starball
  • 20,030
  • 7
  • 43
  • 238
SolArabehety
  • 8,467
  • 5
  • 38
  • 42
  • 2
    I partially agree with PrabhuM, however Gaurav's answer below is more elegant: define the animation in XML is arguably better MVC style. – ATutorMe Nov 11 '15 at 08:15
44

Use XML Animations for this purpose :

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 Activity: use it like this :-

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(this,
                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) {

    }

}

Let me know if you have any queries..

Naveed Ahmad
  • 6,627
  • 2
  • 58
  • 83
Gaurav Arora
  • 8,282
  • 21
  • 88
  • 143
27

Edited

It is a deprecated answer to Android before version 3.0 honeycomb, please uses SolArabehety's answer or look at this thread.

The only reason I keep this answer is to historical reasons before android 3.0 Android animations had a lot of problems, this "bad" solution work at that time, nowadays it is unthinkable to use it, so just go for an animation solution, don't use this code.

Original Answer

package teste.blink;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;

public class TesteBlinkActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        blink();
}

private void blink(){
    final Handler handler = new Handler();
    new Thread(new Runnable() {
        @Override
        public void run() {
        int timeToBlink = 1000;    //in milissegunds
        try{Thread.sleep(timeToBlink);}catch (Exception e) {}
            handler.post(new Runnable() {
                @Override
                    public void run() {
                    TextView txt = (TextView) findViewById(R.id.usage);
                    if(txt.getVisibility() == View.VISIBLE){
                        txt.setVisibility(View.INVISIBLE);
                    }else{
                        txt.setVisibility(View.VISIBLE);
                    }
                    blink();
                }
                });
            }
        }).start();
    }

<TextView 
   android:id="@+id/usage"
   android:layout_marginTop="220dip"
   android:layout_marginLeft="45dip"
   android:layout_marginRight="15dip"
   android:typeface="serif"            
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="Google "
   android:textColor="#030900"/>

ademar111190
  • 14,215
  • 14
  • 85
  • 114
  • sorry, try now lacked one thing – ademar111190 Feb 15 '12 at 13:28
  • note that the text color is dark, so I suppose the bottom is clear – ademar111190 Feb 15 '12 at 13:55
  • @sany have others ways, for example AlphaAnimation, thread is only one of many ways. – ademar111190 Aug 16 '12 at 18:06
  • How does this should not all views (TextView) should be updated from Main Thread? – Gaurav Agarwal Dec 22 '12 at 22:49
  • This is a TERRIBLE answer. Use Android animations! See the answer below by SolArabehety – zundi May 03 '17 at 15:36
  • @zundi It is obviously a bad answer if you are not considering the context, this is an answer to early of 2012, we have a lot of issues in this period with old android animations classes in old android versions like 1.6 and 2.1, One of the mentioned issues was making impossible to build a blink animation in that old android versions and this answer makes possible to blink a text in that android versions. To a better answer to today android versions withou bug, see the answer of solarabehety – ademar111190 May 04 '17 at 22:25
  • @ademar111190 You should update your comment indicating that this isn't the best answer as of today. – zundi May 05 '17 at 03:38
12

Don't need set for this. Just alpha:

anim/flash_leave_now.xml

    <?xml version="1.0" encoding="utf-8"?>
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
       android:duration="900"
       android:fromAlpha="1.0"
       android:repeatCount="infinite"
       android:repeatMode="reverse"
       android:toAlpha="0.2"/>

And in code:

mTextView.setAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.flash_leave_now));
Prakash
  • 4,479
  • 30
  • 42
8

Create an AlphaAnimation and apply it to the textview in the activity where you setup the textview. The blinking would be accomplished by repeating an animation from 1.0 alpha to 0.0 alpha to 1.0 alpha.


Edit: Google provideth.

mirabilos
  • 5,123
  • 2
  • 46
  • 72
Nick Campion
  • 10,479
  • 3
  • 44
  • 58
  • can you please give me an example or link on that – Goofy Feb 15 '12 at 13:17
  • can you also please tel how to underline a textview. please give me an example on that also – Goofy Feb 15 '12 at 13:24
  • 1
    @Goofy this is pretty absurd. Use google. You will probably need to apply a UnderlineSpan to the text before inserting it into a textview. – Nick Campion Feb 15 '12 at 13:33
  • android:textStyle="bold" this will make the text bold but i am telling you about UNDERLINING a text – Goofy Feb 15 '12 at 13:35
2

Just use the <blink/> tag.

<blink
     android:layout_width="wrap_content"
     android:layout_height="wrap_content">

  <TextView 
       android:id="@+id/usage"
       android:layout_marginTop="220dip"
       android:layout_marginLeft="45dip"
       android:layout_marginRight="15dip"
       android:typeface="serif"            
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Google "
       android:textColor="#030900"/>

</blink>
Hounshell
  • 5,321
  • 4
  • 34
  • 51
0

Courtesy to the top answer, this is what i did:

 textBlink = new TimerTask() {
        int countdown = 10;

        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    if (countdown <= 0) {
                        timer.cancel();
                        textview.setVisibility(View.GONE);
                    } else {
                            textview.setVisibility(textview.getVisibility() == View.VISIBLE?View.GONE:View.VISIBLE);
                        countdown--;
                    }
                }
            });
        }
    };

then somewhere on the code:

  timer = new Timer();
  timer.scheduleAtFixedRate(textBlink,0,500);

This will do a blink effect for 5 seconds. Recommended for if you don't want the fadeIn-fadeOut effect.

Irshu
  • 8,248
  • 8
  • 53
  • 65
0
private fun blink() {
        val handler = Handler()
        Thread(Runnable {
            val timeToBlink = 500    //in milissegunds
            try {
                Thread.sleep(timeToBlink.toLong())
            } catch (e: Exception) {
            }

            handler.post(Runnable {

                if (usage.visibility == View.VISIBLE) {
                    usage.visibility = View.INVISIBLE
                } else {
                    usage.visibility = View.VISIBLE
                }
                blink()
            })
        }).start()
    }
eagerprince
  • 115
  • 1
  • 5
0
public final class BlinkEffectUtils {

    private static BlinkEffectUtils blinkEffect;

    public enum PROPERTY_TYPE {
        BACKGROUND_COLOR,
        TEXT_COLOR
    }

    private BlinkEffectUtils() {
    }

    public static BlinkEffectUtils getInstance(Context context) {
        if (blinkEffect == null) {
            blinkEffect = new BlinkEffectUtils();
        }

        return blinkEffect;
    }

    public void setBlinkEffect(Object targetView, PROPERTY_TYPE property_type, int duration, int defaultColor, int effectColor) {
        String propertyName = "";

        switch (property_type) {

            case TEXT_COLOR:
                propertyName = "textColor";
                break;

            case BACKGROUND_COLOR:
                propertyName = "backgroundColor";
                break;
        }

        @SuppressLint("ObjectAnimatorBinding")
        ObjectAnimator anim = ObjectAnimator.ofInt(targetView, propertyName,
                effectColor,
                defaultColor);
        anim.setDuration(duration);
        anim.setEvaluator(new ArgbEvaluator());
        anim.setRepeatMode(ValueAnimator.REVERSE);
        anim.setRepeatCount(ValueAnimator.INFINITE);
        anim.start();

    }

}
Caner Yılmaz
  • 201
  • 3
  • 6
0

You can make an animation or maybe why not making it View.VISIBLE and View.INVISIBLE with a timer? I think the better way is the animation with alpha indeed :)

Climbatize
  • 1,103
  • 19
  • 34
-1

Here is my helper implementation using an alpha animation:

    public void blinkText(final TextView text_to_animate, int durationMillis) {

        final AlphaAnimation fade_out = new AlphaAnimation(1.0f, 0.0f);
        //ScaleAnimation scale_it = new ScaleAnimation(1.0f, 1.25f, 1.0f, 1.25f);
        fade_out.setDuration(durationMillis);

        final AlphaAnimation fade_in = new AlphaAnimation(0.0f, 1.0f);
        //ScaleAnimation scale_it = new ScaleAnimation(1.0f, 1.25f, 1.0f, 1.25f);
        fade_in.setDuration(durationMillis);

        fade_out.setAnimationListener(new AnimationListener() {
            public void onAnimationEnd(Animation arg0) {
                // TODO Auto-generated method stub
            if (recording == true)
                text_to_animate.startAnimation(fade_in);
            }
            public void onAnimationRepeat(Animation arg0) {
                // TODO Auto-generated method stub              
            }

            public void onAnimationStart(Animation arg0) {
                // TODO Auto-generated method stub              
            }

        });

        fade_in.setAnimationListener(new AnimationListener() {
            public void onAnimationEnd(Animation arg0) {
                // TODO Auto-generated method stub
                if (recording == true)
                    text_to_animate.startAnimation(fade_out);
            }
            public void onAnimationRepeat(Animation arg0) {
                // TODO Auto-generated method stub              
            }

            public void onAnimationStart(Animation arg0) {
                // TODO Auto-generated method stub              
            }

        });

        text_to_animate.startAnimation(fade_out);       

    }
code4cause
  • 119
  • 1
  • 9