7

以前にもカラー フィルターを適用した GridView 内の ImageView の色を取得しようとしています。4.2.2 の Nexus 4 で実行しています

このように ImageView の色を変更しています。フィルターを適用する前の画像の実際の色は白です。

Drawable myIcon = getResources().getDrawable(R.drawable.bufferbuildercolor3);                       
myIcon.setColorFilter(new PorterDuffColorFilter(Color.rgb(Color.red(color),Color.green(color), Color.blue(color)),PorterDuff.Mode.MULTIPLY));

これで、実際にソース画像の色が変更されることはありません。これは私が望むものです。それは常に白いままです。

私の問題は、設定に使用したデータを失った後、色をうまく参照しようとしていることです。ImageView を長押しして、その色を取得したい。

以下の質問でいくつかのコードを見つけましたが、フィルターではなく元の画像の色である白 (255,255,255) を常に返すため、機能していないようです。Androidでピクセルカラーを取得する方法は?

ImageView imageView = ((ImageView)v);
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
int pixel = bitmap.getPixel(x,y);

int redValue = Color.red(pixel);
int blueValue = Color.blue(pixel);
int greenValue = Color.green(pixel);

以下のようなものを試しましたが、getColorFilter を呼び出すとクラッシュします。

ImageView image = (ImageView)findViewById(R.drawable.bufferbuildercolor3);
ColorFilter test = image.getColorFilter();

実際のグリッド位置のX / Yを見つけて、画像ではなくその時点で画面の背景色を取得することを除いて、他に何をすべきかわかりません。これを行うためのより簡単な方法があるはずだと思われますか?

4

1 に答える 1

7

後で取得することに関心のあるデータでImageView(またはViewそのことについてはany ) にタグを付けることができます。たとえば、ビューのColor作成に使用したものと同じタグをビューに付けPorterDuffColorFilterます。

Color tagColor = Color.rgb(Color.red(color),Color.green(color), Color.blue(color));
// tag
imageview.setTag(tagColor);

// get tag
tagColor = (Color) imageview.getTag();

関連するビューがガベージ コレクションを行うと、明らかにタグがガベージ コレクションを取得します。

または、3 番目のコード スニペットのアプローチは、修正すれば実際に機能する可能性があります。現在、ドローアブルIDを探してビューを膨らませようとしていますが、これは意味がありません。id は次の形式にする必要がありますR.id.imageview_id

ImageView image = (ImageView) findViewById(R.id.imageview);
ColorFilter test = image.getColorFilter();
于 2013-05-22T06:08:45.670 に答える