项目中需要根据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. java字体颜色编程_Java 字体颜色转换工具类 ColorUtil

    Java 字体颜色转换工具类 ColorUtil,Java 字体颜色转换工具类 ColorUtil-- import java.awt.Color; import jxl.format.Colour; ...

  2. Java 字体颜色转换工具类 ColorUtil

    import java.awt.Color;  import jxl.format.Colour;       /**  *字体颜色转换工具类  * @author tanghui  *  */ pu ...

  3. android 单位转换工具,Android单位转换工具类

    Android单位转换工具类 Android单位转换工具类主要由以下4部分构成 1.这个类不能被初始化 2.dip转px接口 3.sp转px接口 4.px转dip接口 代码如下: import and ...

  4. android长度单位转换工具类

    package doge.healthcare.Utils;import android.content.Context;/*** Created by doge on 2017/4/17.* 用于长 ...

  5. Android 单位转换工具类

    public class DisplayUtil {/*** 将px值转换成为dip或dp值,保证尺寸大小不变* * @param context* @param pxValue* @return*/ ...

  6. android 字体像素转换工具类_Android中px与dip,sp与dip等的转换工具类

    Android中px与dip,sp与dip等的转换工具类 功能 通常在代码中设置组件或文字大小只能用px,通过这个工具类我们可以把dip(dp)或sp为单位的值转换为以px为单位的值而保证大小不变.方 ...

  7. android 字体像素转换工具类_android px,dp,sp大小转换工具

    package com.voole.playerlib.util; import android.content.Context; /** * Android大小单位转换工具类 * * float s ...

  8. Android大小单位转换工具类

    package com.utouu.im.util; /**  * Android大小单位转换工具类  *   *   */ public class DisplayUtil { /** * 将px值 ...

  9. android 字体像素转换工具类_Android开发之拼音转换工具类PinyinUtils示例

    本文实例讲述了Android开发之拼音转换工具类PinyinUtils.分享给大家供大家参考,具体如下: 1.首先下载pinyin4j-2.5.0.jar,拷贝到工程的lib目录里 或者点击此处本站下 ...

最新文章

  1. python帮助文档在哪_python文档在哪里
  2. HTTP协议发展历程
  3. 受疫情影响 蔚来整车生产已经暂停
  4. win+apache实现ssl的证书认证
  5. 四川地震,物联网地震预警系统立功了
  6. 使用Spring Boot日志框架在已有的微服务代码中添加日志功能
  7. aop cache再讨论
  8. 你程序员,996这就是你的命
  9. 电脑技巧:推荐几款装机必备的软件
  10. 动态规划 -- 钢条切割问题
  11. 编译原理: Subset Construction 子集构造法(幂集构造)(NFA转DFA)
  12. 那就祝你有数不尽的鲜花和浪漫
  13. 和量子计算有什么区别 并发_到底什么是量子计算?
  14. 嵌入式培训多少钱?嵌入式学习要了解这些内容!
  15. YOLO如何训练分类网络???
  16. Permissions 0777 for xxx are too open
  17. java se安装_安装Java SE平台
  18. 看雪逆向-Security Documentation
  19. 文学院计算机报名是access吗,ACCESS综合练习范文
  20. remove.bg - 自动抠图、一键去除图片背景的免费在线工具

热门文章

  1. C语言:判断一个数m是否为素数?
  2. matlab simulink:使用model linearier分析任意系统的伯德图(应该是任意的单输入单输出)
  3. ANYVIEW(网络警)安装与测试
  4. eureka使用总结
  5. matlab 细化 去环,Matlab的memory模块消除代数环
  6. GAN Inversion: A Survey
  7. 关于共享网络打印机出现“Windows 无法访问,找不到网络路径”问题解决方法
  8. 【项目总结】近期爬虫详解(MBA智库百科词条爬虫同花顺财经数据爬虫)
  9. 怎某泳c语言输出图形,c语言打印字符图形.doc
  10. 丝绸之路大数据交易中心成立