web-dev-qa-db-fra.com

Comment faire clignoter la vue texte

Les gars j'ai un textview dont j'ai besoin pour qu'il clignote s'il vous plaît aidez-moi avec elle.

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

Je veux que le texte de Google clignote

42
Goofy

C'est une réponse obsolète à Android avant la version 3.0, utilisez la réponse de SolArabehety ou regardez this thread.

Réponse originale

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

23
ademar111190

Vous pouvez utiliser ceci:

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

C'est la même réponse que j'ai donnée dans cet article Texte clignotant dans la vue Android

J'espère que cela t'aides!

160
SolArabehety

Utilisez des animations XML à cette fin:

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>

Activité de clignotement: utilisez-le comme ceci: -

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

    }

}

Faites-moi savoir si vous avez des questions..

21
Gaurav Arora

Créez un AlphaAnimation et appliquez-le à la vue texte dans l'activité où vous avez configuré la vue texte. Le clignotement serait accompli en répétant une animation de 1,0 alpha à 0,0 alpha à 1,0 alpha.


Edit: Google fournit .

8
Nick Campion

Pas besoin de set pour ça. Juste 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"/>

Et en code:

mTextView.setAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.flash_leave_now));
3
Prakash

Courtesy to the top answer, voici ce que j'ai fait:

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

puis quelque part sur le code:

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

Cela fera un effet de clignotement pendant 5 secondes. Recommandé si vous ne souhaitez pas l'effet fadeIn-fadeOut.

0
Irshu

Vous pouvez créer une animation ou pourquoi ne pas la rendre avec View.VISIBLE et View.INVISIBLE avec un minuteur Je pense que la meilleure façon est l'animation avec alpha en effet :)

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

    }

}
0
Caner Yılmaz