使用Android java或sqlite将HEX颜色值排序为彩虹顺序

时间:2014-09-05 16:17:40

标签: java android sqlite sorting hex

我的sqlite数据库中有一个代表HEX颜色值的文本字段,例如" 92B01C"。我用一个光标填充listview:

data = database.query("threads", newfields, where_clause, null, null, null, "CAST(" + newfields[0] + " AS TEXT)" + " " + "COLLATE NOCASE ASC");
dataAdapter.changeCursor(data);
dataAdapter.getCursor().requery();

其中newfields [0]是sqlite数据库十六进制颜色字段。

我的目标是按照彩虹顺序'中的HEX颜色对列表视图进行排序,即所有RED阴影在一起,然后是绿色阴影等等。

我猜我必须将String十六进制值转换为RGB值,然后以某种方式将其应用于数据库查询。

所以我的问题是:

  1. 这样的db.query可以用于sqlite,还是我必须以某种方式在查询之外执行此操作?

  2. 如何将字符串十六进制值拆分为RGB颜色,以便它们可以按彩虹顺序排序?我想过使用Collections.sort但是那怎么会和database.query一起使用?

  3. 如果在db.query中无法实现如何在sqlite database.query之后将任何collections.sort应用到listview?

  4. 任何帮助都会很棒......

    更新

    感谢您提出的所有建议,请访问:

    我创建了一个新的db整数字段" color_sortorder"我将用于颜色排序。

    我循环db HEX颜色字符串字段并将其添加到arraylist。

    while (colorrawdata.isAfterLast() == false) {
        hexcoloritems.add(colorrawdata.getString(colorrawdata.getColumnIndex("colorref")));
        colorrawdata.moveToNext();
    }
    

    然后我使用此比较器对arraylist进行排序:

    class mycolorComparator implements Comparator<String> {
        public int compare(String strA, String strB) {
    
            float[] hsv1 = new float[3];
            float[] hsv2 = new float[3];
    
            int n1 = Integer.parseInt(strA, 16);
            int n2 = Integer.parseInt(strB, 16);
    
            Color.colorToHSV(n1, hsv1);
            Color.colorToHSV(n2, hsv2);
    
            if ((int)hsv1[0] == (int)hsv2[0]) {
                return (int)hsv1[2] - (int)hsv2[2];
            }
    
            return (int)hsv1[0] - (int)hsv2[0];
    
        }
    }
    

    然后我循环使用arraylist来填充新的db颜色排序字段。

    for (int x = 0; x < hexcoloritems.size(); x++) {
        database.execSQL("UPDATE threads SET color_sortorder='" + x + "' WHERE colorref='" + hexcoloritems.get(x) + "';");
    }
    

    结果很有希望但不太正确。颜色的列表视图似乎是分组但在绿色组的分组中,阴影不是从浅到深运行,而是随机排序(但正确的绿色阴影)。

    这是结果订单(520的前20个)

    Setting db color_sortorder to 0 where db colorref=FAFAFA
    Setting db color_sortorder to 1 where db colorref=FAFAFA
    Setting db color_sortorder to 2 where db colorref=000000
    Setting db color_sortorder to 3 where db colorref=de605e
    Setting db color_sortorder to 4 where db colorref=F2ACAC
    Setting db color_sortorder to 5 where db colorref=C16363
    Setting db color_sortorder to 6 where db colorref=FAFAFA
    Setting db color_sortorder to 7 where db colorref=B61F1E
    Setting db color_sortorder to 8 where db colorref=951A18
    Setting db color_sortorder to 9 where db colorref=CC2523
    Setting db color_sortorder to 10 where db colorref=ffd5d5
    Setting db color_sortorder to 11 where db colorref=FFCECE
    Setting db color_sortorder to 12 where db colorref=FFE1E1
    Setting db color_sortorder to 13 where db colorref=FFD5D5
    Setting db color_sortorder to 14 where db colorref=D64542
    Setting db color_sortorder to 15 where db colorref=8E3230
    Setting db color_sortorder to 16 where db colorref=D6403D
    Setting db color_sortorder to 17 where db colorref=DB3D38
    Setting db color_sortorder to 18 where db colorref=FFC1BF
    Setting db color_sortorder to 19 where db colorref=D58582
    

    问题,我想,与比较器有关,任何人都可以给我一些洞察它的问题吗?

0 个答案:

没有答案