Java颜色按年龄划分

时间:2012-03-18 16:25:39

标签: java graphics colors

我正在编写一个显示一些图形的小应用程序,现在我正在尝试根据对象的年龄(通过System.currentTimeMillis()保存)更改颜色,因此最老的是蓝色和最新的对象显示红色左右。有谁知道算法vel ita(左右)?

3 个答案:

答案 0 :(得分:1)

假设您希望最旧的对象为蓝色,并且最新对象为红色,并且您知道所有对象“年龄”(让我们称之为{{ 1}})

timestamp

如果要缩放要显示的阴影数,只需按照步长缩放比例即可。例如:

// mesure the difference in age of the newest and oldest objects
double agediff = newest.timestamp - oldest.timestamp;

// for any given object :
// 1. color ratio from 0.0=old to 1.0=new
double ratio = (someObject.timestamp - oldest.timestamp) / ageDiff;

// 2. get red and blue values
int red = 255 - (255 * ratio);
int blue = 255 * ratio;

// 3. construct Color
Color objectColor = new Color(red, 0, blue);

或者,如果您想要从最新TTL值扩展到最大TTL值(例如,// the maximum number of shades between blue and red int step = 4; // the value cannot be 1 (otherwise use a Color constant!) double stepScale = 256 / (step - 1); double halfStepScale = stepScale / 2; ratio = Math.ceil((int) ((ratio * 256 + halfStepScale) / stepScale) * stepScale) / 256d; 60 seconds),只需将60000 millis替换为此值并更改你的算法包括溢出检查:

oldest.timestamp

** 修改 **

如果你想要蓝色/红色以外的其他渐变,你可以拥有:

// our "oldest" timestamp is now pre-defined:
long oldestTs = newest.timestamp - ttlTimestamp;  // ttlTimestamp = 60000;
// mesure the difference in age of the newest and the TTL (ex: 60000)
double agediff = newest.timestamp - oldestTs;

// for any given object :
// 1. color ratio from 0.0=old to 1.0=new
double ratio = (someObject.timestamp - oldestTs) / ageDiff;

if (ratio < 0.0) ratio = 0.0;   // prevent overflow

// etc.

答案 1 :(得分:0)

颜色=年龄&gt; 5280? Color.RED:年龄&gt; 1000? Color.BLACK:年龄&gt; 30? Color.YouGetTheIdea

答案 2 :(得分:0)

你可以根据每个对象的年龄得到一个度量,可以是毫秒,小时,也可以是基于上述的自定义度量,即任何&lt; 1小时是1等。

这为你提供了衡量标准。你可以迭代通过对象找到9min和max的当前限制,或者你甚至可以在计算度量时这样做:每次小于min时,存储新的min等。

现在你传播了。最后一件事就是应用颜色。假设我们的对象范围从10毫秒到1000毫秒。您可以将其拆分为3个区域:例如10 - 100,100-500,500 -1000,并根据该区域应用颜色。