0

ArrayList<KNDrawingTOOL>と呼ばれるアクティビティがありますallTools

KNDrawingTool は以下のとおりです。Comparable を実装し、compare メソッドは基本的に色相によって色を並べ替えます。それはうまくいきます..しかし、私はそのソートされた配列を取り、それを値で再度ソートし、色相の順序を維持したいと思います..これを行う方法はありますか?

KNDrawingTool

 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));
        }

        mPaint.setAntiAlias(true);
        mPaint.setDither(true);
        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 by Hue");
        //return (color-other.color);

        float[] hsv1 = new float[3];
        float[] hsv2 = new float[3];

        Color.colorToHSV(color,hsv1);
        Color.colorToHSV(other.color,hsv2);
        return ((int)hsv1[0]-(int)hsv2[0]);
    }
}

私のメインクラスはただ呼び出すだけですCollections.sort(allTools);

私が言ったように、これはそれらをすべてHUEでソートします..次に、色相の順序を維持しながら値でソートする2番目のパスを作成したいと思います..

4

1 に答える 1

0

1回のパスで並べ替えを行うことができます

float[] hsv1 = new float[3];
float[] hsv2 = new float[3];

Color.colorToHSV(color, hsv1);
Color.colorToHSV(other.color, hsv2);

if ((int)hsv1[0] == (int)hsv2[0]) {
    return (int)hsv1[2] - (int)hsv2[2];
}

return (int)hsv1[0] - (int)hsv2[0];
于 2013-06-21T03:18:25.743 に答える