完成最优路线的颜色梯度计算

增加逻辑,3D模式下关闭道路事件连线的绘制
This commit is contained in:
董宏宇
2021-04-16 17:53:54 +08:00
parent af05b71bdd
commit a2ef2bbd44
4 changed files with 69 additions and 44 deletions

View File

@@ -1,5 +1,7 @@
package com.mogo.utils;
import android.graphics.Color;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
@@ -12,60 +14,73 @@ import java.util.regex.Pattern;
public class ColorUtils {
/**
* @return 获取渐变色集合
* ARGB颜色 转 HEX颜色
*/
public static List<Integer> gradient(String startColor, String endColor, int step) {
// 将HEX转为RGB
int[] sColor = hexToRgb(startColor);
int[] eColor = hexToRgb(endColor);
// 计算每一步的差值
int rStep = (eColor[0] - sColor[0]) / step;
int gStep = (eColor[1] - sColor[1]) / step;
int bStep = (eColor[2] - sColor[2]) / step;
// 生成渐变色
List<Integer> gradientColorArr = new ArrayList<>();
for (int i = 0; i < step; i++) {
public static String argbToHex(int alpha, int red, int green, int blue) {
if (alpha < 0 || alpha > 255
|| red < 0 || red > 255
|| green < 0 || green > 255
|| blue < 0 || blue > 255) {
return "";
}
return gradientColorArr;
String alphaStr = Integer.toHexString(alpha);
String redStr = Integer.toHexString(red);
String greenStr = Integer.toHexString(green);
String blueStr = Integer.toHexString(blue);
return ("#" + alphaStr + redStr + greenStr + blueStr).toUpperCase();
}
/**
* HEX颜色 转 RGB颜色
* HEX颜色 转 ARGB颜色
*/
public static int[] hexToRgb(String hex) {
int[] rgb = new int[3];
if (!Pattern.matches("^#[0-9a-f[A-F]]{6}", hex)) {
public static int[] hexToArgb(String hex) {
int[] rgb = new int[4];
if (!Pattern.matches("^#[0-9a-f[A-F]]{8}", hex)) {
return rgb;
}
String redStr = hex.substring(1, 3);
String greenStr = hex.substring(3, 5);
String blueStr = hex.substring(5);
String alphaStr = hex.substring(1, 3);
String redStr = hex.substring(3, 5);
String greenStr = hex.substring(5, 7);
String blueStr = hex.substring(7);
rgb[0] = Integer.valueOf(redStr, 16);
rgb[1] = Integer.valueOf(greenStr, 16);
rgb[2] = Integer.valueOf(blueStr, 16);
rgb[0] = Integer.valueOf(alphaStr, 16);
rgb[1] = Integer.valueOf(redStr, 16);
rgb[2] = Integer.valueOf(greenStr, 16);
rgb[3] = Integer.valueOf(blueStr, 16);
return rgb;
}
/**
* RGB颜色 转 HEX颜色
* 对传入颜色生成梯度透明的颜色集合
*
* @param startColor 开始颜色
* @param startColor 结束颜色
* @param step 步长
* @return 生成的梯度颜色集合
*/
public static String rgbToHex(int red, int green, int blue) {
if (red < 0 || red > 255 || green < 0 || green > 255 || blue < 0
|| blue > 255) {
return "";
public static List<Integer> gradientAlpha(String startColor, String endColor, int step) {
// 将HEX转为RGB
int[] sColor = hexToArgb(startColor);
int[] eColor = hexToArgb(endColor);
// 计算每一步的差值
int aStep = (eColor[0] - sColor[0]) / step;
int rStep = (eColor[1] - sColor[1]) / step;
int gStep = (eColor[2] - sColor[2]) / step;
int bStep = (eColor[3] - sColor[3]) / step;
// 生成渐变色
List<Integer> gradientColorArr = new ArrayList<>();
for (int i = 0; i < step; i++) {
gradientColorArr.add(
Color.argb(aStep * i + sColor[0],
rStep * i + sColor[1],
gStep * i + sColor[2],
bStep * i + sColor[3]));
}
String redStr = Integer.toHexString(red);
String greenStr = Integer.toHexString(green);
String blueStr = Integer.toHexString(blue);
return ("#" + redStr + greenStr + blueStr).toUpperCase();
return gradientColorArr;
}
}