项目中需要根据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的更多相关文章

  1. Android开发学习之路-Palette颜色提取工具类使用

    视频(要FQ):https://www.youtube.com/watch?v=5u0dtzXL3PQ Palette是一个在support-v7包中的一个颜色提取工具类,用法比较简单,而且是谷歌官方 ...

  2. Android Bitmap与DrawAble与byte[]与InputStream之间的转换工具类【转】

    package com.soai.imdemo; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; ...

  3. (转)Android中px与dip,sp与dip等的转换工具类

    功能 通常在代码中设置组件或文字大小只能用px,通过这个工具类我们可以把dip(dp)或sp为单位的值转换为以px为单位的值而保证大小不变.方法中的参数请参考http://www.cnblogs.co ...

  4. 我的Android进阶之旅------>Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)

    Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换) 有时候要做出如下所示的展示文件大小的效果时候,需要对文件大小进行转换,然后再进行相关的代码逻辑编写. 下面是一个Java ...

  5. DensityUtil【尺寸转换工具类(px、dp互相转换)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 用于项目中dp.px.sp之间的转换以及指定缩放值下的转换. 效果图 暂不需要 代码分析 常用的方法是px2dip.dip2px: ...

  6. Android 软件管理工具类Utils

    Android 软件管理工具类Utils /** * Created by uilubo on 2015/9/30. * 工具类 */ public class Utils { public stat ...

  7. (转载)实例详解Android快速开发工具类总结

    实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...

  8. Json与javaBean之间的转换工具类

    /**  * Json与javaBean之间的转换工具类  *  * {@code 现使用json-lib组件实现  *    需要  *     json-lib-2.4-jdk15.jar  * ...

  9. 日期转换工具类 CommUtil.java

    package com.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.ut ...

随机推荐

  1. linux c 得到时间

    ctime: 将时间和日期以字符串格式表示头文件: time.h函数定义: char *ctime(const time_t *timep); 应用举例:#include <stdio.h> ...

  2. 凡客副总裁崔晓琦离职 曾负责旗下V+商城项目_科技_腾讯网

    凡客副总裁崔晓琦离职 曾负责旗下V+商城项目_科技_腾讯网 凡客副总裁崔晓琦离职 曾负责旗下V+商城项目 腾讯科技[微博]乐天2013年09月18日12:44 分享 微博 空间 微信 新浪微博 邮箱 ...

  3. node.js 解析xml BOM问题(xmlreader sax.js)

    Email:longsu2010 at yeah dot net 之前写了两篇文章关于node.js解析xml,说的是xmlreader,文章如下 node.js解析xml(xmlreader) no ...

  4. django学习之Model(一)

    认认真真学Django,从现在开始. 学习资料来源于官方网站:https://docs.djangoproject.com/en/1.6/ 1-新建一个models.py from django.db ...

  5. Web网页中内嵌Activex的Activex插件开发 .

    转载自: http://blog.csdn.net/tttyd/article/details/5258096 源代码下载 http://files.cnblogs.com/tttyd/Activex ...

  6. meanShift算法介绍

    meanShift,均值漂移,在聚类.图像平滑.切割.跟踪等方面有着广泛的应用.meanShift这个概念最早是由Fukunage在1975年提出的,其最初的含义正如其名:偏移的均值向量:但随着理论的 ...

  7. iphone分辨率终极指南(含有iphone6/6+)

    如文本不清楚.请 "对->图片另存为" 下载大图后, ------------------------- 原文及翻译文本 Points点 At the beginning, ...

  8. winform 防止主界面卡死

    总结网络上的解决方案:新线程=> 委托=> 主界面的异步更新方法(IAsyncResult BeginInvoke(Delegate method)),一句话就是通过委托调用另一个线程的异 ...

  9. 《WCF技术剖析》博文系列汇总[持续更新中]

    原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...

  10. @Autowired 注释与@Qualifier 注释

    @Service("OrganDaoIbatis") public class OrganDaoIbatis extends BaseDao implements IOrganDa ...