我有一些代碼的問題。我想創建一個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
總是黑色的。
有人知道該怎麼做嗎?