清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
项目中需要根据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; …… } …… }
原文地址: Android颜色转换工具类ColorUtil