Android - Background Color FadeIn , FadeOut Animation,背景動畫漸變效果

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

這下終於完成了