2013-03-19 52 views
0

我有一個ImageView,如下所示:如何着色的imageview的一部分在機器人

<ImageView 
    android:id="@+id/barchart" 
    android:layout_width="100dp" 
    android:layout_height="6dp" 
    android:layout_below="@+id/stats" 
    android:layout_marginTop="9dp" 
    android:layout_toRightOf="@+id/model" 
    android:background="@android:color/white" /> 

於是,這圖像可基本在一個白色水平條的形式表示。現在,我想顏色ImageView寬度取決於動態值。如果值爲30dp,那麼圖像的30dp將以一種顏色顯示,其餘70dp將以白色顯示。

所以,目標基本上是以條形圖的形式來表示。

+1

爲什麼不使用水平進度條? – 2013-03-19 09:30:18

+0

@DavidOlsson這是一個可行的選擇,但我需要不同的顏色取決於價值觀,並認爲它不應該移動,應該看起來像條形圖.. – Chaitanya 2013-03-19 09:46:41

+0

progressbar你剛剛設置進度,你可以有進步的顏色,二次進展並沒有進展。所以可能有3種顏色。 – 2013-03-19 09:54:03

回答

1

最簡單的方法是重寫View類並手動繪製條形圖。也許甚至不是一個條紋,而是整個圖表。這很容易做到。類似這樣的:

class ChartView extends View { 
    Paint paint = new Paint(); 
    List<Rect> stripes = new ArrayList<Rect>(); 
    List<Integer> colors = new ArrayList<Integer>(); 

    public ChartView(Context context) { 
     super(context); 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     super.draw(canvas); 
     for (Rect r : stripes) { 
      paint.setColor(colors.get(stripes.indexOf(r))); 
      canvas.drawRect(r, paint); 
     } 
    } 
} 

當然,使用rects來存儲酒吧是一個相當糟糕的主意。此外,你必須改變繪圖部分,以實現雙色條,但我希望你明白。

http://developer.android.com/reference/android/graphics/Canvas.html http://developer.android.com/reference/android/graphics/Paint.html

+0

那麼,如果我們想要像上述功能的東西,我們肯定需要有兩個imageviews嗎?我的意思是我們不能使用單個圖像視圖來實現這個目標嗎? – Chaitanya 2013-03-19 09:50:31

+0

您可以使用適當的位圖或漸變,但我認爲使用ImageView構建圖表不是一個好主意。 – Zielony 2013-03-19 10:22:03

+0

好的。有沒有任何理由不使用ImageView? – Chaitanya 2013-03-19 11:12:07