• Android颜色转换工具类ColorUtil


    项目中需要根据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);
        }
    
    }
    

    这里我用到了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;
            ……
        }
        ……
    }
  • 相关阅读:
    【足迹C++primer】32、定制操作_2
    pom文件miss artifact com.sun:tools:jar:1.5.0:system问题
    cents上运行wget报错:unable to resolve host address
    怎样定义函数模板
    06006_redis数据存储类型——String
    雷林鹏分享:C# 类型转换
    雷林鹏分享:C# 运算符
    雷林鹏分享:C# 循环
    雷林鹏分享:C# 判断
    雷林鹏分享:C# 方法
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4831687.html
Copyright © 2020-2023  润新知