Android获得线性渐变某点的颜色
安卓官方确实提供了好多非常强大的工具给我们了,例如我们最近经常在shape中加入gradient(渐变),像我的项目中用的是线性渐变,
- <?xml version="1.0" encoding="utf-8"?>
- <shape xmlns:android="http://schemas.android.com/apk/res/android">
- <corners android:radius="5dip" />
- <gradient android:startColor="#262626" android:endColor="#ffbc1c" android:angle="0" />
- </shape>
并且这个图片作为SeekBar的背景,用来选择颜色,滑到哪就选择哪里的颜色,如图所示:
为此我想到了两种可能的实现方法:
1、获取SeekBar的背景的图片的bitmap,获取对应点来获得颜色
2、直接通过线性渐变的算法获得某个位置上的颜色
方法1 简单方便,对于其他的控件也可以使用,但是消耗的内存比较大
方法2 内存消耗非常少,但是需要了解线性渐变的算法,并且只能对线性渐变的图片有效,其他渐变方式都需要重新写,但是线性渐变往往用得比较多,所以打算使用第二个方法。
线性渐变是最简单的渐变,思想就是对应颜色A的R G B不断的往颜色B的R G B靠近,并且认识到的是:在java中,(很多其他语言也是)用一个int来存放颜色的RGB值,但是这个只是存储方式而已,实际上每个RGB是互不相关的,渐变时需要分别取出,分别变化。写了一个简易的两个颜色渐变的颜色选择器,代码如下:
- /**
- * Created by chenxiaoxuan1 on 16/3/25.
- */
- public class LinearGradientUtil {
- private int mStartColor;
- private int mEndColor;
- public LinearGradientUtil(int startColor, int endColor) {
- this.mStartColor = startColor;
- this.mEndColor = endColor;
- }
- public void setStartColor(int startColor) {
- this.mStartColor = startColor;
- }
- public void setEndColor(int endColor) {
- this.mEndColor = endColor;
- }
- public int getColor(float radio) {
- int redStart = Color.red(mStartColor);
- int blueStart = Color.blue(mStartColor);
- int greenStart = Color.green(mStartColor);
- int redEnd = Color.red(mEndColor);
- int blueEnd = Color.blue(mEndColor);
- int greenEnd = Color.green(mEndColor);
- int red = (int) (redStart + ((redEnd - redStart) * radio + 0.5));
- int greed = (int) (greenStart + ((greenEnd - greenStart) * radio + 0.5));
- int blue = (int) (blueStart + ((blueEnd - blueStart) * radio + 0.5));
- return Color.argb(255,red, greed, blue);
- }
- }
实现后并且用单元测试测试过,然后就正式的使用了,使用结果还是很满意的~
后来,有一个需求是做一个简单的条形颜色选择器,也是用SeekBar实现的,也是线性渐变,只是颜色多了一些而已。如图:
原理是一样的,晚点有空再补代码。
Android获得线性渐变某点的颜色的更多相关文章
- 再说CSS3渐变——线性渐变
渐变背景一直以来在Web页面中都是一种常见的视觉元素.但一直以来,Web设计师都是通过图形软件设计这些渐变效果,然后以图片形式或者背景图片的形式运用到页面中.Web页面上实现的效果,仅从页面的视觉效果 ...
- CSS3渐变——线性渐变
渐变背景一直以来在Web页面中都是一种常见的视觉元素.但一直以来,Web设计师都是通过图形软件设计这些渐变效果,然后以图片形式或者背景图片的形式运用到页面中.Web页面上实现的效果,仅从页面的视觉效果 ...
- CSS3渐变(Gradients)-线性渐变
CSS3渐变(Gradients)可以让你在两个或多个指定颜色之间显示平稳的过度,包括透明度. 以前,你必须使用图像来实现这些效果.但是,通过Css3渐变(Gradients),你可以减少下载的事件和 ...
- IT兄弟连 HTML5教程 CSS3属性特效 渐变2 线性渐变实例
3 线性渐变实例 一.颜色从顶部向底部渐变 制作从顶部到底部直线渐变有三种方法,第一种是起点参数不设置,因为起点参数的默认值为“top”:第二种方法起点参数设置为“top”:第三种起点参数使用“-90 ...
- Android线性渐变
布局实现: 1. 在res中建立drawable文件夹. 2. 在drawable文件夹中建立shape.xml. 3. shape.xml的代码如下: <?xml version=" ...
- css3的背景颜色渐变@线性渐变
背景颜色渐变之线性渐变 语法形式: firefox浏览器 background:-moz-linear-gradient(position/deg,startColor,endColor); oper ...
- 颜色线性渐变-CAGradientLayer
我们先来看一下效果图吧: 其实,就是一个颜色的线性渐变,使用CAGradientLayer很容易就能实现.由于代码很简单,就不做过多讲解了,直接看代码吧. import UIKit class Vie ...
- CSS3中颜色线性渐变实战
css3线性渐变可以设置3个参数值:方向.起始颜色.结束颜色.最简单的模式只需要定义起始颜色和结束颜色,起点.终点和方向默认自元素的顶部到底部.下面举例说明: CSS Code复制内容到剪贴板 .te ...
- 【 D3.js 高级系列 — 5.1 】 颜色插值和线性渐变
颜色插值指的是给出两个 RGB 颜色值,两个颜色之间的值通过插值函数计算得到.线性渐变是添加到 SVG 图形上的过滤器,只需给出两端的颜色值即可. 1. 颜色插值 在[高级 - 第 5.0 章]里已经 ...
随机推荐
- hw-text1
Text 1 测试题 python是什么类型的语言? 解释型语言,是脚本语言 百娘(脚本语言是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语 ...
- ARM920T系统总线时序分析
一.系统总线时序图 二.分析 第一个时钟周期开始,系统地址总线给出需要访问的存储空间地址. 经过Tacs时间后,片选信号也相应给出,并且锁存当前地址线上地址信息. 再经过Tcso时间后,处理器给出当前 ...
- sizeof()用法
参考:sizeof_百度百科 sizeof()用法汇总(经典) 声明:本文是笔者抽出对自己有用的细节,对前两文的总结. 1.sizeof概念 sizeof是C语言中判断数据类型或者表达式长度符:不是一 ...
- 手写JS无缝滚动插件
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- oracle excute immediate 单引号转义
excute immedaite 后接单引号,但是遇到 add xxx default ' ' ,命令中还有单引号的情况,需要转义.这时候不是用传统的 \ 反斜杠来转义,而是用 单引号转义 execu ...
- Contest20140709 testA 树型DP
testA 输入文件: testA.in 输出文件testA.out 时限5000ms 问题描述: 一棵树N个节点,每条边有一个距W,现在定义SUM为所有dist(X,Y)的和1<=X<Y ...
- [BZOJ 1112] [POI2008] 砖块Klo 【区间K大】
题目链接:BZOJ - 1112 题目分析 枚举每一个长度为k的连续区间,求出这个区间的最优答案,更新全局答案. 可以发现,这个区间的所有柱子最终都变成这k个数的中位数时最优,那么我们就需要查询这个区 ...
- List Of All Machine Learning Sorted By Citation
List Of All Machine Learning Sorted By Citation With > 300 citations 2013-10-10 See Citation Anal ...
- PhoneGap + Dreamweaver 5.5 无法在模拟器中打开的问题(二)
转载:http://blog.csdn.net/dupang/article/details/8248335 按照网上的教程搭建Dreamweaver CS5.5+PhoneGap移动开发环境,在进行 ...
- prototype.js 源码解读(02)
如果你想研究一些比较大型的js框架的源码的话,本人建议你从其最初的版本开始研读,因为最初的版本东西少,易于研究,而后的版本基本都是在其基础上不断扩充罢了,所以,接下来我不准备完全解读prototype ...