0

一部のコードに問題があります。ColorPicker を作成したいDialogFragment。現時点では、 aGridViewと a customを使用して、BaseAdapterいくつかの色の形を示しています。各色にラウンドを使用しShapeDrawableます。デフォルト状態の色を設定するには、次のコードを使用します。

私の「ColorAdapter」のgetView()

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;

それは私にとってはうまくいきます。

しかし、アイコンが押されたときにアイコンの色を変更したい。だから私はを使用し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、実行時に状態の色を変更する必要があります。

ご覧のとおり、両方の状態に同じ描画可能リソースを使用しています。で行うように、1 つの状態の色を設定できるかもしれませんstates.getCurrent()

ColorFilterまた、輝度レベルを下げるために a を使用しようとしました。しかし、それをしようとすると、ImageView押されたときに常に黒くなります。

誰もそれを行う方法を知っていますか?

4

1 に答える 1

0

わかりました、解決策を見つけました。LayerDrawable最初のレイヤーには形状が含まれ、2 番目のレイヤーにはaが含まれますStateListDrawable。これStateListDrawableには、デフォルト状態の空のシェイプが 1 つと、アルファ値が低いグレーのシェイプが 1 つ含まれています。今、カラー サークルを押すと、グレーのシェイプがカラー シェイプの上に置かれます。

于 2015-03-03T21:09:33.540 に答える