2013-06-18 2 views
0

다음은 브러쉬 끝처럼 사용하고있는 드로잉 도구 클래스입니다. 드로잉 응용 프로그램의 경우.색상의 정수 표현 정렬 - android

내 주요 활동에는이 개체 유형의 arrayList가 있는데 나는 색상별로 정렬하고 싶습니다. 당신이 난 그냥 int 치의 각 도구의 색상 값입니다 INT1-INT2를 (반환하는 compareTo 메소드를 볼 수 있습니다 ..하지만 내가 예상되는 방식으로 분류하지 않는

.

내가 노력하고 있어요 지금은 그들이 오히려 지능 이상의 형 컬러의라면이 아마 쉬울 것 알고있다. 무지개처럼 색으로

을 (를) 정렬 할 수 있지만, 데이터 소스는 검은 색에 대한 16 진수 표기는 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); 
    } 
} 
+0

? 그리고'compareTo' 메소드를 사용하여리스트를 정렬하고 있습니까? 당신은 어떤 종류의 결과를 내고 있습니까? –

+0

내 주요 활동에는 ArrayList allTools가 있습니다. 저는 Collections.sort (allTools)를 호출합니다. – erik

+0

그것들을 정렬하지만 DarkRed, Medium Red, Red, DarkPurple, 중간 보라색, 보라색, 진한 파란색 .. 등등을 원합니다. 그러나 내가 무엇을 얻는지는 Dark Red, Dark Purple, Dark Blue, Medium Red , Medium Purple .. 등 – erik

답변

0

당신은 아마 당신의 RGB 색상 값을 HSL/HSV로 변환 한 다음 각 구성 요소별로 정렬 H = 색조, S = 채도, (L = 밝기 | V = 값). 곧이 게시물을 코드로 업데이트 할 예정입니다.

코드 업데이트 : 당신은`compareTo` 메소드를 호출하려면 어떻게

public class MainActivity extends Activity 
{ 
    private static final int[] COLORS = { 
     Color.BLACK, Color.MAGENTA, Color.RED, 
     Color.BLUE, Color.DKGRAY, Color.YELLOW, 
     Color.LTGRAY, Color.GREEN, Color.GRAY, 
     Color.CYAN, Color.WHITE, 0xFFCC0000, 
     0xFF00CC00, 0xFF0000CC, 0xFFCCCC00, 
     0xFF00CCCC, 0xFFCC00CC, 
    }; 

    private static final int[] FOREGROUNDS = { 
     android.R.attr.textColorPrimary, 
     android.R.attr.textColorPrimaryInverse, 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     ListView listView = new ListView(this); 

     ArrayList<KNDrawingTool> tools = new ArrayList<KNDrawingTool>(); 
     for(int i = 0; i < COLORS.length; i++){ 
      tools.add(new KNDrawingTool(COLORS[i], "Color Entry #" + i)); 
     } 
     Collections.sort(tools); 

     final int foregrounds[] = new int[FOREGROUNDS.length]; 
     TypedArray taForegrounds = getTheme().obtainStyledAttributes(FOREGROUNDS); 
     for(int i = 0; i < FOREGROUNDS.length; i++){ 
      foregrounds[i] = taForegrounds.getColor(i, Color.WHITE); 
     } 
     taForegrounds.recycle(); 

     listView.setAdapter(new ArrayAdapter<KNDrawingTool>(this, 0, tools) 
     { 
      @Override 
      public View getView(int position, View convertView, ViewGroup parent) 
      { 
       TextView text; 
       if(convertView == null){ 
        text = (TextView)LayoutInflater.from(parent.getContext()) 
         .inflate(android.R.layout.simple_list_item_1, parent, false); 
       } 
       else{ 
        text = (TextView)convertView; 
       } 
       KNDrawingTool item = getItem(position); 
       text.setText(item.name); 
       text.setBackgroundColor(item.color); 
       if(item.hsv[2] > 0.5){ 
        text.setTextColor(foregrounds[0]); 
       }else{ 
        text.setTextColor(foregrounds[1]); 
       } 
       return text; 
      } 
     }); 
     setContentView(listView); 
    } 


    private class KNDrawingTool implements Comparable<KNDrawingTool> 
    { 
     private int color; 
     private String name; 
     private float[] hsv = new float[3]; 

     public KNDrawingTool(int color, String name) 
     { 
      this.color = color; 
      this.name = name; 
      Color.colorToHSV(color, hsv); 
     } 

     @Override 
     public int compareTo(KNDrawingTool another) 
     { 
      for(int i = 0; i < 3; i++){ 
       if(hsv[i] != another.hsv[i]){ 
        return (hsv[i] < another.hsv[i]) ? -1 : 1; 
       } 
      } 
      return 0; 
     } 
    } 
}