0

私は Gridview で画面に画像を表示することに取り組んでおり、現在 ImageAdapter を使用してダウンロードした画像を Gridview にロードしています。タップすると、選択した画像の上に別の画像を描画して選択を示します。問題は、RelaytiveLayout を介してそれらを子として追加する必要があるため、画像をスクロールすると、画像が作成された場所にとどまり、従わないことです。スクロールで。そこで、2 つのイメージビューが重なるカスタム ビューを作成して、一方を非表示に設定し、もう一方をアダプタで埋めようとしました。選択すると、重なっている画像が再表示される予定でした。アダプターからロードする場合、カスタム ビュー (ビューは子を追加できないため、実際には 2 つのイメージビューを含めるために ViewGroup を拡張する必要がありました) は、選択可能なフレームをロードします。どちらの画像も表示されずに完全に透明です。画面に触れたときに設定した寸法に青いボックスが表示されるため、選択可能であることがわかりました。カスタム ビューを表示するために、publc getView() 関数にロードしていました。私はこれについて間違った方法で進んでいますか?他の誰かがこのようなことをしたかどうかを確認するためにかなりの試みをしましたが、見つけることができたのは、RelativeLayout で重複する画像を描画するか、GridView に画像を読み込むためのチュートリアルでしたが、両方ではありませんでした。申し訳ありませんが、私は Android の初心者です。しかし、私が見つけたのは、RelativeLayoutで重複する画像を描画するか、GridViewに画像をロードするためのチュートリアルでしたが、両方ではありませんでした. 申し訳ありませんが、私は Android の初心者です。しかし、私が見つけたのは、RelativeLayoutで重複する画像を描画するか、GridViewに画像をロードするためのチュートリアルでしたが、両方ではありませんでした. 申し訳ありませんが、私は Android の初心者です。

4

4 に答える 4

0

私が間違っていなければ、あなたが必要としているのはgridView、あなたがタップしたときのビューの選択された状態です。既存のものの上に別の画像を描く必要はないと思います。カスタムアダプタを使用しているのと同じように、viewHolderパターンを使用して、既存のビューの背景自体を変更できます。次のリンクをご覧ください。あなたはその方法についていくらかの考えを得るかもしれません。

Androidのカスタムリストビューでビューを動的に非表示にする

于 2012-08-22T07:48:11.937 に答える
0
ImageView iv = (ImageView)v.findViewById(R.id.grid_item_image);
iv.setBackgroundResource(imageIDs[4]);
iv.setImageResource(imageIDs[2]); 
于 2012-12-25T10:54:28.210 に答える
0

ListViews は、タッチ モードの間、フォーカス (または選択) の視覚的な表示を保持しません。これは、ハードウェア キーボードまたはコントロールを使用して UI をナビゲートする場合にのみ表示されます。

詳細については、Googleタッチモード Android ブログの記事を参照してください。

そのため、タッチ モードのみを使用している場合は、ListView にフォーカスや選択が表示されることはありません。

あなたがしていることは、少し変更するだけでうまくいきます。

  • ImageView(child) をコンテナ (RelativeLayout などの親) 内に配置します。
  • 背景が見えるように、親にパディングを設定します。
  • クリックすると、クリックした項目の親の背景が変更されます (GridView の OnClickListener の onClick() メソッド内)。
  • アダプターで notifyDataSetChanged() を呼び出します (現在表示されているアイテムを再描画するため)

このサンプルコードは次のとおりです。

    grid.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick (AdapterView<?> parent,
                    View v, int position, long Id)
            {
                    highlighted = position;    //highlighted is a global variable
                    //container is the root view of the list row layout
                    LinearLayout container = (LinearLayout)v.findViewById(R.id.container);
                    container.setBackgroundResource(R.drawable.highlighted_backg);
                    mGridAdapter.notifyDataSetChanged();

            }
   });

getView() メソッドのコード:

public View getView (int position, View convertView, ViewGroup parent)
{
    ViewHolder holder;

    if(convertView == null) {
        convertView = inflater.inflate(R.layout.row_item, null);
        holder = new ViewHolder();
        holder.itemName1 = (TextView)convertView.findViewById(R.id.text1);
        ...
        holder.container = (LineaLayout)convertView.findViewById(R.id.container);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    if(MainActivity.highlighted == position) {
        holder.container.setBackgroundResource(R.drawable.highlighted_backg);
    }else {
        holder.foodItemCol1.setBackgroundResource(R.drawable.normal_back);
    }

    return convertView;
}
于 2012-08-22T09:12:35.070 に答える