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;
……
}
……
}
Android颜色转换工具类ColorUtil的更多相关文章
- Android开发学习之路-Palette颜色提取工具类使用
视频(要FQ):https://www.youtube.com/watch?v=5u0dtzXL3PQ Palette是一个在support-v7包中的一个颜色提取工具类,用法比较简单,而且是谷歌官方 ...
- Android Bitmap与DrawAble与byte[]与InputStream之间的转换工具类【转】
package com.soai.imdemo; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; ...
- (转)Android中px与dip,sp与dip等的转换工具类
功能 通常在代码中设置组件或文字大小只能用px,通过这个工具类我们可以把dip(dp)或sp为单位的值转换为以px为单位的值而保证大小不变.方法中的参数请参考http://www.cnblogs.co ...
- 我的Android进阶之旅------>Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)
Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换) 有时候要做出如下所示的展示文件大小的效果时候,需要对文件大小进行转换,然后再进行相关的代码逻辑编写. 下面是一个Java ...
- DensityUtil【尺寸转换工具类(px、dp互相转换)】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 用于项目中dp.px.sp之间的转换以及指定缩放值下的转换. 效果图 暂不需要 代码分析 常用的方法是px2dip.dip2px: ...
- Android 软件管理工具类Utils
Android 软件管理工具类Utils /** * Created by uilubo on 2015/9/30. * 工具类 */ public class Utils { public stat ...
- (转载)实例详解Android快速开发工具类总结
实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...
- Json与javaBean之间的转换工具类
/** * Json与javaBean之间的转换工具类 * * {@code 现使用json-lib组件实现 * 需要 * json-lib-2.4-jdk15.jar * ...
- 日期转换工具类 CommUtil.java
package com.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.ut ...
随机推荐
- C语言实现单链表的逆置
单链表的逆置是一个非常经典的问题,这里利用两个思想进行解决. 首先,我们需要看下原理图,其实两个思想都是一样的,都是使后一个的节点的 next 指针指向前一个节点,依次递推,直 ...
- C++将文件内容一次性读入内存
结合字符串流,将文件中的内容一次性读入内存,代码如下: #include <string> using std::ostringstream; using std::ifstream; u ...
- android项目中刷新activity界面
android项目中在sqlite数据库插入/更新/删除数据后: 1. 刷新当前activity界面数据(手动刷新): 在activity类下新增一个refresh()方法: /** * 刷新, 这样 ...
- [置顶] c# datagridview‘s learn
c# 一串数字“1122331111155”,要输出到DataGridview控件上,但是要逐个数字读取,如果上一个数字与下一个相同,则排成一列,不相同,则另外排成一列.如“11223311111 ...
- AsyncTask究竟需要多少个线程
最起码两个:主线程和工作线程; 可以参考:http://zhidao.baidu.com/link?url=ho4UEcEbaogRZUFHwig1neSKR25b2zT9iXyM36hEgWTmvJ ...
- iOS 7 - Auto Layout on iOS Versions prior to 6.0
链接地址:http://stackoverflow.com/questions/18735847/ios-7-auto-layout-on-ios-versions-prior-to-6-0 Stac ...
- BZOJ 3367: [Usaco2004 Feb]The Big Game 球赛( dp )
dp(i)表示前i个人最少坐多少辆车, dp(i) = min(dp(j) + 1, dp(i)) (0 <= j < i 且 (i, j]的人能坐在一辆车上) 时间复杂度O(n²) -- ...
- JVM调优总结(五)-分代垃圾回收详述1
为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对象, ...
- SAP 标准单价、移动单价在 AP 中的影响--(详细)
今天我将向大家介绍下SAP中两种单价模式在系统中所产生的影响,先主要讲讲在AP中影响,它主要有两个方面产生影响(物料收货migo,发票校验miro). 演示背景(假设以下都为本位币交易): 库存(单价 ...
- D16Pascal的编译器和IDE
https://github.com/Memnarch/D16Pascal https://github.com/Memnarch/D16IDE https://github.com/Memnarch ...