0

私のプログラムには、子ビューとしてイメージビューを持つグリッドビューがあります。元の画像の上に半透明のレイヤーと目盛りを表示して、特定の画像ビューをクリックしたときにユーザーにフィードバックを提供したいと考えています。私は3層のlayerdrawableを使用しています。小さなアプリケーションを作成してコードをテストしたところ、完全に機能しました。しかし、グリッドビュー内では機能していません。

public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{

    baseimage = ((ImageView)v).getDrawable(); //This is the original image thumbnail
layers = new Drawable[3];
layers[0] = baseimage;
layers[1] = white_color;// white_color is a ColorDrawable with colour = 2147483647
layers[2] = tick_mark;

    if(!selected[(int)id])//selected is a boolean array to store if an imageview is selected or not
    {
Toast.makeText(this,"selected",Toast.LENGTH_SHORT).show();
//layers[1].setVisible(true,true);
//layers[2].setVisible(true,true);

translucent = new LayerDrawable(layers);
((ImageView)v).setImageDrawable(translucent);
v.invalidate();
selected[(int)id] = true;
    }
    else
    {
    //((ImageView)v).setImageDrawable(baseimage);
    //layers[1].setVisible(false,true);
//layers[2].setVisible(false,true);
translucent.invalidateSelf();
v.invalidate();
((ImageView)v).setImageDrawable(null);
((ImageView)v).setImageDrawable(baseimage);
Toast.makeText(this,((ImageView)v).getDrawable().toString(),Toast.LENGTH_SHORT).show();

selected[(int)id] = false;
    }

}

コードを実行すると、最初はレイヤードローアブルが正しく表示され、もう一度クリックしてもイメージビューに変化はありませんでした。3回目にクリックすると、新しいレイヤードローアブルが既存のレイヤードローアブルに追加され、白い半透明のレイヤーが毎回上に追加されます。

私を助けてください。

4

1 に答える 1

0

私はあなたの問題を見ます。

初めてご来店される方onItemClick()baseimage=v.getDrawable()イメージのみです。ただし、 が 2 回目にonItemClick()呼び出されると、 はbaseimage=v.getDrawable()画像 + 白色 + 目盛オーバーレイを表す場合があります。したがって、if(!selected[(int)id])ケースが実行されても、オーバーレイが表示されます。

于 2013-02-01T22:51:32.793 に答える