2011-08-14 17 views
5

私は、図形と単色の項目を持つレイヤーリストを持っています。今私は自分のコード内でこの色を変更したい。プログレスバーの色をプログラムで切り替える

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <clip> 
      <shape android:id="@+id/seekbar_shape_color"> 
       <solid android:color="#FFD00000" /> 
      </shape> 
     </clip> 

    </item> 
</layer-list> 

iはLayerDrawable取得し、最初の項目を要求して、今、私の他のアプローチはShapeDrawableを取得することでした

LayerDrawable sd = (LayerDrawable) v.getResources().getDrawable(R.drawable.seekbar_progress_bg); 
((ClipDrawable) sd.getDrawable(0)).get..(); 

ShapeDrawableを取得し、最終的clipDrawableを取得して立ち往生し、IAMと色フィルタで色を設定しようと試みしかしそれはどちらもうまくいかない。

ShapeDrawable sd = (ShapeDrawable) v.getResources().getDrawable(R.id.seekbar_shape_color); 
sd.setColorFilter(R.color.cold_color,PorterDuff.Mode.MULTIPLY); 

編集:ので、私は新しい計画 を開発し[OK]を、私はレベルのデフォルト値は0であると思いますが、私は得るいけない

<level-list 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:maxLevel="0" android:drawable="@color/hot_color"> 
    </item> 
    <item android:maxLevel="1" android:drawable="@color/cold_color"> 
    </item> 
</level-list> 

のようなLevelListを使用するようにしようと試みましたプログレスバーはLevelListとともに表示されます。 はまた、私は私がでsetLevel()

 holder.progressbar.getBackground().setLevel(0); 
     holder.progressbar.getIndeterminateDrawable().setLevel(0); 
     holder.progressbar.getProgressDrawable().setLevel(0); 

この呼び出しは私に100%の進捗着色を得る唯一の新鮮なプログレスバーの項目のような奇妙な結果を与えることを設定する必要が上のどの要素を知らない、キャッシュの問題のようなにおい。誰かが私はこの質問は数ヶ月古いですが、私は進歩での作業レベルのリストを取得することができたノウハウProgressBarのレイヤリストに適切に おかげ

答えて

15

をLevelListを使用するために私を啓発することができます

希望バー。 トリックは、0と10,000の間のレベル値を割り当てます。 私の具体的な例では、バッテリー寿命を表すために3つのレベル(赤/黄/緑)がありました。

<?xml version="1.0" encoding="utf-8"?> 

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:id="@android:id/background"> 
     <shape> 
      <corners android:radius="5dip" /> 
      <gradient 
        android:startColor="#ff9d9e9d" 
        android:centerColor="#ff5a5d5a" 
        android:centerY="0.75" 
        android:endColor="#ff747674" 
        android:angle="270" 
      /> 
     </shape> 
    </item> 

    <item android:id="@android:id/secondaryProgress"> 
     <clip> 
      <shape> 
       <corners android:radius="5dip" /> 
       <gradient 
         android:startColor="#80ffd300" 
         android:centerColor="#80ffb600" 
         android:centerY="0.75" 
         android:endColor="#a0ffcb00" 
         android:angle="270" 
       /> 
      </shape> 
     </clip> 
    </item> 

    <item android:id="@android:id/progress"> 
     <clip> 
      <shape> 
       <corners android:radius="5dip" /> 
       <gradient 
         android:startColor="#ffffd300" 
         android:centerColor="#ffffb600" 
         android:centerY="0.75" 
         android:endColor="#ffffcb00" 
         android:angle="270" 
       /> 
      </shape> 
     </clip> 
    </item> 
</layer-list> 

のres /描画可能/ progress_horizo​​ntal_red.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:id="@android:id/background"> 
     <shape> 
      <corners android:radius="5dip" /> 
      <gradient 
        android:startColor="#ff9d9e9d" 
        android:centerColor="#ff5a5d5a" 
        android:centerY="0.75" 
        android:endColor="#ff747674" 
        android:angle="270" 
      /> 
     </shape> 
    </item> 

    <item android:id="@android:id/secondaryProgress"> 
     <clip> 
      <shape> 
       <corners android:radius="5dip" /> 
       <gradient 
         android:startColor="#80ffd300" 
         android:centerColor="#80ffb600" 
         android:centerY="0.75" 
         android:endColor="#a0ffcb00" 
         android:angle="270" 
       /> 
      </shape> 
     </clip> 
    </item> 

    <item android:id="@android:id/progress"> 
     <clip> 
      <shape> 
       <corners android:radius="5dip" /> 
       <gradient 
         android:startColor="#ffff0000" 
         android:centerColor="#ff990000" 
         android:centerY="0.75" 
         android:endColor="#ffff0000" 
         android:angle="270" 
       /> 
      </shape> 
     </clip> 
    </item> 

</layer-list> 

のres/

のres /描画可能/ progress_horizo​​ntal_yellow.xml:ここ

は、私はそれをやった方法ですdrawable/progress_horizo​​ntal_green.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:id="@android:id/background"> 
     <shape> 
      <corners android:radius="5dip" /> 
      <gradient 
        android:startColor="#ff9d9e9d" 
        android:centerColor="#ff5a5d5a" 
        android:centerY="0.75" 
        android:endColor="#ff747674" 
        android:angle="270" 
      /> 
     </shape> 
    </item> 

    <item android:id="@android:id/secondaryProgress"> 
     <clip> 
      <shape> 
       <corners android:radius="5dip" /> 
       <gradient 
         android:startColor="#80ffd300" 
         android:centerColor="#80ffb600" 
         android:centerY="0.75" 
         android:endColor="#a0ffcb00" 
         android:angle="270" 
       /> 
      </shape> 
     </clip> 
    </item> 

    <item android:id="@android:id/progress"> 
     <clip> 
      <shape> 
       <corners android:radius="5dip" /> 
       <gradient 
         android:startColor="#ff00ff00" 
         android:centerColor="#ff009900" 
         android:centerY="0.75" 
         android:endColor="#ff00ff00" 
         android:angle="270" 
       /> 
      </shape> 
     </clip> 
    </item> 
</layer-list> 

のres /描画可能/ battery_charge_fill.xml

<?xml version="1.0" encoding="utf-8"?> 
<level-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:maxLevel="2999" android:drawable="@drawable/progress_horizontal_red" /> 
    <item android:maxLevel="4999" android:drawable="@drawable/progress_horizontal_yellow" /> 
    <item android:maxLevel="10000" android:drawable="@drawable/progress_horizontal_green" /> 
</level-list> 

は、次にレイアウトで私のプログレスバーの宣言を提出、このようなものだった:Javaで次に

<ProgressBar android:max="100" 
    android:progress="60" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/BatteryLevelProgress" 
    style="@android:style/Widget.ProgressBar.Horizontal" 
    android:progressDrawable="@drawable/battery_charge_fill" /> 

//progress is between 0 and 100 so set level of drawable to progress * 100 
Drawable batteryProgressD = batteryProgressBar.getProgressDrawable(); 
batteryProgressD.setLevel(progress*100); 
batteryProgressBar.setProgress(progress); 
関連する問題