如何使文本视图闪烁

伙计们,我有一个文本视图,我需要它闪烁,请帮助我与它。

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

我希望谷歌文本闪烁

94907 次浏览

创建一个 AlphaAnimation并将其应用到您设置 textview 的活动中的 textview。闪烁将通过重复从1.0 alpha 到0.0 alpha 到1.0 alpha 的动画来完成。


编辑 : Google 提供

你可以制作一个动画,或者为什么不用定时器来制作 View.VISIBLE 和 View.INVISBLE?我认为更好的方法是使用 alpha 的动画:)

编辑

这是一个 不赞成的答案之前的 Android 版本 3.0蜂窝,请使用 SolArabehety 的回答或看看 这个线程。

我保留这个答案的唯一原因是由于历史原因,在安卓3.0之前,安卓动画有很多问题,这个 “坏”解决方案在那个时候是可行的,现在是不可想象的使用它,所以只需要一个动画解决方案,不要使用这个代码。

原始答案

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

你可以用这个:

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

这和我在这篇文章 机器人视图中的闪烁文本中给出的答案是一样的

希望这个能帮上忙!

下面是使用 alpha 动画的 helper 实现:

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


}

为此使用 XML 动画:

灵魂,眨眼

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

眨眼活动: 像这样使用它:-

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


}


}

如果你有任何疑问请告诉我。

不需要准备,只要阿尔法:

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

代码是:

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

礼貌的回答,这就是我所做的:

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

然后在代码的某个地方:

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

这将做一个5秒的眨眼效果。推荐如果你不想要的淡入淡出效果。

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


}


}

只要使用 <blink/>标签。

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