2015-10-04 64 views
0

我加入的項目(使用圖標)我的菜單是這樣的:編程設置形狀的顏色繪製

subMenu.add(user.getName()).setIcon(R.drawable.user_bg); 

user_bg繪製的佈局是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/user_color"> 
     <shape 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:shape="oval"> 
      <solid 
       android:color="#000000" 
       /> 
      <size 
       android:width="100dp" 
       android:height="100dp" 
       /> 
     </shape> 
    </item> 

    <item 
     android:drawable="@drawable/user" 
     android:adjustViewBounds="true" 
     android:scaleType="fitXY" 
     /> 

</layer-list> 

如何可以在添加新項目後以編程方式更改可繪製的顏色(#000000)?

回答

0

以編程方式創建繪圖,設置其顏色,然後將其設置在菜單上。喜歡的東西:

Drawable icon = getResources().getDrawable(R.drawable.icon); 
if (icon instanceOf ShapeDrawable) { 
    icon.getPaint().setColor(getResources().getColor(R.color.some_color)); 
    subMenu.setIcon(icon); 
} 
+0

如果我有一個'for'循環,增加了多個項目的菜單,其中每個項目有它自己的獨立顏色。我在'for'循環中添加了你的代碼,但是它將所有項目的顏色設置爲循環中最後一種顏色。 – user5403695

0
int red = 102, green = 34, blue = 100; 
drawable.setColorFilter(red,Mode.ADD); 
drawable.setColorFilter(green,Mode.ADD); 
drawable.setColorFilter(blue,Mode.ADD); 

注:這將刪除色調如果有的話,你的繪製。 檢查this question,以獲得更多信息abot setColorFilter()方法

0

我不知道這是否是最好的方式來做到這一點,但它的工作原理。

  1. 獲取到繪製

    的引用。如果你想設置你繪製的顏色,然後添加

    ​​

    或者

    如果你想在子項到在已添加項目

    後更改顏色

    LayerDrawable drawable = (LayerDrawable)subMenu.getItem().getIcon()

  2. 呼叫Drawable.Mutate()

    drawable .Mutate();

    有關說明,請參閱項目#2的this答案

  3. 創建一個顏色繪製

    ColorDrawable newColor = new ColorDrawable(Color.parseColor("#000000"));

  4. 設置/重置顏色

    drawable.setDrawableByLayerId(R.id.user_color, newColor);

  5. 重繪繪製

    drawable.invalidateSelf();