【发布时间】:2013-06-15 01:25:14
【问题描述】:
下面是一个绘图工具类,我将其用作画笔笔尖。对于绘图应用程序。
在我的主要活动中,我有一个此对象类型的 arrayList,我想按颜色对它们进行排序。
如您所见,我有一个 compareTo 方法,它只返回 int1-int2(其中 int 是每个工具的颜色值。但这并没有按照我预期的方式对它们进行排序。
我正在尝试像彩虹一样按颜色对它们进行排序。
现在我知道,如果它们的类型是 Color 而不是 Int,这可能会更容易,但数据源将返回 Int 值,例如黑色的 0xff000000。
public class KNDrawingTool implements Comparable<KNDrawingTool>{
public int id;
public String name;
public int size;
public int color;
public int cost;
public int capacity;
public int amountLeft;
public String type;
public Paint mPaint;
public KNDrawingTool(String toolType, Boolean flatTip, int paintId, String paintName, int paintSize,int paintColor, int paintCost, int canCapacity, int remainingAmount){
type = toolType;
id = paintId;
name = paintName;
size = paintSize;
color =paintColor;
cost = paintCost;
capacity = canCapacity;
amountLeft = remainingAmount;
mPaint = new Paint();
if(type == "paint"){
mPaint.setMaskFilter(new BlurMaskFilter(15, BlurMaskFilter.Blur.NORMAL));
}
/*if(flatTip){
mPaint.setStrokeCap(Paint.Cap.SQUARE);
}else{
mPaint.setStrokeCap(Paint.Cap.ROUND);
}*/
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setColor(color);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(size);
}
/* (non-Javadoc)
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
@Override
public int compareTo(KNDrawingTool other) {
Log.v("TOOL", "SOrting");
return (color-other.color);
}
}
【问题讨论】:
-
如何调用
compareTo方法?您是否使用compareTo方法对列表进行排序?你能给出你得到什么样的输出吗? -
在我的主要活动中,我有一个 ArrayList
allTools;我只是调用 Collections.sort(allTools); -
它对它们进行排序,但我想要 DarkRed、medium Red、red、DarkPurple、medium Purple、Purple、Dark Blue.. 等。但我得到的更像是 Dark Red、Dark紫、深蓝、中红、中紫……等。
-
所以基本上你是在尝试按十六进制值排序?
-
如果我理解正确,您需要按
Hue值对它们进行排序。将您的hex代码转换为hue,然后尝试排序。这篇文章可能会有所帮助:Sort (hex) colors to match rainbow 和 this