Android 按鈕呼吸燈效果
阿新 • • 發佈:2019-02-15
這裡寫程式碼片
公司要求做在按鈕上做一個呼吸燈的效果,想了一下,可以做一個北京,背景執行動畫,讓他迴圈的消失和出現,首先要做兩個動畫
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true"
android:fillEnabled="true" >
<alpha
android:duration="1500"
android:fromAlpha ="0.0"
android:toAlpha="1.0" />
</set>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true"
android:fillEnabled="true" >
<alpha
android:duration="1500"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
然後就是自己包裝了一下的imageview
public class loopPicture extends ImageView{
private Context mContext;
private ImageView breathImageView;
private Timer timer;
private boolean isOpen = true;
private int index = 0;
private final int BREATH_INTERVAL_TIME = 1000; //設定呼吸燈時間間隔
public Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
breathImageView.clearAnimation();
breathImageView.setAnimation(getFadeIn());
break;
case 2:
breathImageView.clearAnimation();
breathImageView.setAnimation(getFadeOut());
break;
}
super.handleMessage(msg);
}
};
public loopPicture(Context context) {
super(context);
this.mContext=context;
breathImageView=this;
startTimer();
}
public loopPicture(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.mContext=context;
breathImageView=this;
startTimer();
}
public loopPicture(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext=context;
breathImageView=this;
startTimer();
}
private Animation getFadeIn() {
Animation fadeIn = AnimationUtils.loadAnimation(mContext,
R.anim.alpha_fade_in);
fadeIn.setDuration(BREATH_INTERVAL_TIME);
fadeIn.setStartOffset(100);
return fadeIn;
}
private Animation getFadeOut() {
Animation fadeOut = AnimationUtils.loadAnimation(mContext,
R.anim.alpha_fade_out);
fadeOut.setDuration(BREATH_INTERVAL_TIME);
fadeOut.setStartOffset(100);
return fadeOut;
}
private void startTimer() {
timer = new Timer(true);
TimerTask task = new TimerTask() {
@Override
public void run() {
if (isOpen) {
if (index == 2) {
index = 0;
}
index++;
Message message = new Message();
message.what = index;
handler.sendMessage(message);
}
}
};
timer.schedule(task, 0, BREATH_INTERVAL_TIME); // 延時0ms後執行,5000ms執行一次
}
}