Android - Background Color FadeIn , FadeOut Animation,背景動畫漸變效果
這次因為滑動滑出(下方呈現或左方拉出),都有一種背景很沒有smoothly的感覺,
決定做個背景漸變效果。
做了才發現,還真是麻煩。
用了三種方法,找了三個文章
第一種:用xml - 問題在連子物件也被漸變了(雖然方法簡單,效果還是沒有理想)
http://www.linuxidc.com/Linux/2011-04/34472.htm
第二種,設定背景漸變顏色,但API限制16以上
http://android--code.blogspot.tw/2015/07/android-background-color-animation.html
第三種,合適的方式,使用程式自己控制,Thread + Handler
第一種,使用xml+AnimationUtils的方式去做。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:duration="500"
android:fromAlpha="0.0"
android:toAlpha="0.5"
android:fillAfter="true"/>
</set>
public void FadeIn(View view,Context context)
{
view.startAnimation(AnimationUtils.loadAnimation(context,
R.anim.fade_in));
}
第二種
public void trasitionDrawable(boolean show,View view) {
ColorDrawable[] color ;
ColorDrawable color1 = new ColorDrawable(0x50000000);
ColorDrawable color2 = new ColorDrawable(0x00000000);
if(show) {
color = new ColorDrawable[]{color2, color1};
} else {
color = new ColorDrawable[]{color1, color2};
}
TransitionDrawable trans = new TransitionDrawable(color);
if(Build.VERSION.SDK_INT >= 16) {
view.setBackground(trans);
trans.startTransition(500);
}
}
第三種
Handler handler = new Handler();
int time=0;
public void Fade(final boolean show, final View view, Context context) {
//初始化開始Background
if(show) {
view.setBackgroundColor(Color.argb(0, 0, 0, 0));
} else {
view.setBackgroundColor(Color.argb(80, 0, 0, 0));
}
(new Thread(){
@Override
public void run(){
for(time=0; time<=500; time = time+10){
handler.post(new Runnable(){
public void run(){
int alpha = 0;
if(show) {
alpha = (80*time)/500;
} else {
alpha = 80 - (80*time)/500;
}
view.setBackgroundColor(Color.argb(alpha, 0, 0, 0));
}
});
// next will pause the thread for some time
try{
sleep(10);
} catch(Exception ex){
break;
}
}
}
}).start();
}
這下終於完成了