Android顏色轉換工具類ColorUtil

jopen 9年前發布 | 1K 次閱讀 Java Android

項目中需要根據ScrollView的滾動距離來動態設置Topbar的背景透明度,網上有類似的開源庫FadingActionBar,使用的是ActionBar做的。而我的項目中并沒有使用ActionBar,當然也沒有去研究那個庫。

當前的狀態是已經有了ScrollView,并且自定義的Topbar效果還不錯,通過接口監聽,將Topbar傳到ScrollView進行動態的背景設置。

既然有Topbar對象了,就可以調用Topbar的方法,于是我在Topbar中添加了一個方法setAlpha(float toAlpha),在ScrollView的TouchEvent中,根據滾動的距離就可以用一定算法將toAlpha設置給Topbar了。

我在ScrollView中寫了一個方法,方便調用:

private void refreshTopbar() {
    if(mOnTurnListener != null) {
         Topbar topbar = mOnTurnListener.onScroll();
         if(getScrollY() >= 300) {
             topbar.setAlpha(1.0f);
         } else if(getScrollY() >= 180 && getScrollY() < 300) {
             topbar.setAlpha((getScrollY() - 180) / 120f);
         } else {
             topbar.setAlpha(0.0f);
         }
    }
}

現在關鍵就是setAlpha這個方法了,其實也簡單,就是利用toAlpha轉換成顏色就行。因此我寫了一個工具類 ColorUtil.java來對顏色進行一些操作:

package com.codefrom.utils;

import java.util.regex.Pattern; import android.graphics.Color; import com.codefrom.common.MApplication;

public class ColorUtil {

/**
 * 獲取資源中的顏色
 * @param color
 * @return
 */
public static int getResourcesColor(int color) {

    int ret = 0x00ffffff;
    try {
        ret = MApplication.gainContext().getResources().getColor(color);
    } catch (Exception e) {
    }

    return ret;
}

/**
 * 將十六進制 顏色代碼 轉換為 int
 * 
 * @return
 */
public static int HextoColor(String color) {

    // #ff00CCFF
    String reg = "#[a-f0-9A-F]{8}";
    if (!Pattern.matches(reg, color)) {
        color = "#00ffffff";
    }

    return Color.parseColor(color);
}

/**
 * 修改顏色透明度
 * @param color
 * @param alpha
 * @return
 */
public static int changeAlpha(int color, int alpha) {
    int red = Color.red(color);
    int green = Color.green(color);
    int blue = Color.blue(color);

    return Color.argb(alpha, red, green, blue);
}

}</pre>

這里我用到了Color自帶的獲取R、G、B的方法。如需要獲取資源文件中的顏色,我使用了MApplication.gainContext()來獲取上下文對象,關于Application的介紹,可以看看Android中Application類用法這篇文章。

有了這個工具類,setAlpha方法就不難寫了:

   public void setAlpha(float toAlpha) {
        //setBackgroundColor(ColorUtil.changeAlpha(ColorUtil.HextoColor("#ff0066ff"), (int)(toAlpha * 0xff)));
        setBackgroundColor(ColorUtil.changeAlpha(ColorUtil.getResourcesColor(R.color.topbar_bg), (int)(toAlpha * 0xff)));
    }

提示:注釋的那一行也可以實現一樣的效果。

由于MApplication用到了很多其他開源框架初始化的東西,就只貼部分內容了:

public class MApplication extends Application {
    /對外提供整個應用生命周期的Context/
    private static Context instance;
    ……
    /**

 * 對外提供Application Context
 * @return
 */
public static Context gainContext() {
    return instance;
}

public void onCreate() {
    super.onCreate();
    instance = this;
    ……
}
……

}</pre>
原文地址: Android顏色轉換工具類ColorUtil

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!