java转安卓工具类_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;

……

}

……

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值