2015-03-02 47 views
0

我有一些代碼的問題。我想創建一個ColorPicker DialogFragment。目前我使用GridView和自定義BaseAdapter來顯示一些顏色形狀。對於每種顏色,我使用一輪ShapeDrawable。要設置默認狀態的顏色,我用下面的代碼:我的「ColorAdapter」如何在運行時使用StateListDrawable?

ImageView imageView; 
if (convertView == null) { 
    imageView = new ImageView(ctx); 
    imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    imageView.setPadding(8, 8, 8, 8); 
} else { 
    imageView = (ImageView) convertView; 
} 

Drawable drawable = ctx.getResources().getDrawable(R.drawable.color_item); 
imageView.setBackground(drawable); 

StateListDrawable states = (StateListDrawable) imageView.getBackground(); 

GradientDrawable shape = (GradientDrawable) states.getCurrent(); 
shape.setColor(colors[i]); 

return imageView; 

這對我來說工作正常的

getView()。

但是我想在按下時更改圖標的顏色。所以我使用StateListDrawable

<selector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:constantSize="true" > 

    <item 
      android:state_pressed="true" 
      android:drawable="@drawable/circle" /> 
    <item 
      android:drawable="@drawable/circle" /> 

</selector> 

但是,因爲我已經在GridView每個條目不同的顏色,我要改變狀態的顏色在運行時。

正如你所看到的,我爲這兩種狀態使用了相同的drawable資源。也許我可以設置一種狀態的顏色,就像我用states.getCurrent()那樣做?

我也嘗試使用ColorFilter來降低亮度級別。但是當我嘗試這樣做的時候,ImageView總是黑色的。

有人知道該怎麼做嗎?

回答

0

好的,我找到了一個解決方案。我用了兩層LayerDrawable,第一個包含我的形狀,第二個包含StateListDrawable。此StateListDrawable包含默認狀態的一個空白形狀和一個較低alpha值的灰色形狀。所以,現在,當我按下我的彩色圓圈時,灰色的形狀被放在我的顏色形狀上。