0

私はゲームを開発しており、GridView としてインベントリを持っています。各グリッド項目は、クリックすると選択される GameObject です。ゲームは、ユーザーが単一のオブジェクトを選択するか、オブジェクトを結合できることを示しています。

私が必要とするのは非常に具体的です:ユーザーがメニューボタンを押してオプションメニューが表示されたときに(「結合」オプションを使用して)、いくつかのアイテムを複数選択するために、各グリッドアイテムにチェックボックスを動的に描画する必要があります(非常に似ていますギャラリーでは、画像ではなくオブジェクトを使用して)、それらを結合します。

私は API レベル 8 を使用しているため、MultiChoiceMode は苦労しています。

また、チェックボックスを使用するのではなく、この機能を実装する方法について誰かがより良い提案をしている場合、私はきっとそれを受け入れるでしょう. 事前にサンクス

グリッド項目の xml は次のとおりです。

<ImageView
    android:id="@+id/grid_item_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

<CheckBox
    android:id="@+id/image_check"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:visibility="invisible" />

および gridView:

<TextView
    android:id="@+id/inventoryMsg"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:background="#000000"
    android:gravity="center"
    android:text="@string/inventory"/>

<GridView
    android:id="@+id/gridView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_above="@id/inventoryMsg"
    android:columnWidth="90dp"
    android:gravity="center"
    android:horizontalSpacing="10dp"
    android:numColumns="3"
    android:stretchMode="columnWidth"
    android:verticalSpacing="10dp" />

これは私の CustomAdapter の getViewMethod です。

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


            View v = convertView;

    if (convertView == null) {
        holder = new ViewHolder();
        LayoutInflater layoutInflater = (LayoutInflater) a.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = layoutInflater.inflate(R.layout.griditem, null);
        holder.gameItemCheck = (CheckBox) v.findViewById(R.id.image_check);
        v.setTag(holder);
    } else {
        holder = (ViewHolder) v.getTag();
    }
    holder.gameItemCheck.setId(position);
    holder.gameItemCheck.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            //dosomestuff
        }
    });

    GameObject gameObject = gameObjectList.get(position);
    ImageView gameItemImageView = (ImageView) v.findViewById(R.id.grid_item_image);


    holder.gameItemCheck.setChecked(Inventory.selected[position]);
    holder.id = position;
    return v;
}

public class ViewHolder {

    public CheckBox gameItemCheck;
    int id;
}

チェックボックスの可視性を動的に変更しようとした方法:

1)

public boolean onKeyDown(int keycode, KeyEvent e) {
    switch (keycode) {
    case KeyEvent.KEYCODE_MENU:
        openOptionsMenu();
        gameObjectAdapter.holder.gameItemCheck.setVisibility(View.VISIBLE);
        gridView.refreshDrawableState();
        return true;
    }

    return super.onKeyDown(keycode, e);
}

2)

public boolean onPrepareOptionsMenu(Menu menu) {
            gameObjectAdapter.holder.gameItemCheck.setVisibility(View.VISIBLE);
            gameObjectAdapter.notifyDataSetChange();
    return true;

}
4

1 に答える 1

3

3 オプション

ギャラリーの選択から適応

方法 1:

選択したセルのビットマップにチェックボックスを描画するだけです。トグルをオフにすると、オリジナルが描画されます。
このコードを使用するのはどうですか:

  private Bitmap drawCheck(Bitmap bmp)
  {
   Bitmap bmChecked = Bitmap.createBitmap(bmp.getWidth(),     bmp.getHeight(), bmp.getConfig());
   Bitmap check = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.upcheck);
   Canvas canvas = new Canvas(bmChecked);

   canvas.drawBitmap(bmp, 0, 0, null);
   canvas.drawBitmap(check, 0, 0, null); 
   return bmChecked;
  }

方法 2

Mihai Fonoage による優れたコードを使用してください。

その後:

  1. LoadedImage クラスに選択済みフラグを追加し、
  2. onItemClick() 関数で、クリックしたアイテムを選択済みとしてマークします
  3. アダプターの getView() でフラグを使用して、画像の背景を設定します

できます。

方法 3: チェック可能なインターフェイス

この例を見てください。Checkable インターフェイスを実装するカスタム レイアウト クラスを使用し、チェックされた項目に色付きの背景描画可能オブジェクトを設定します。

于 2013-03-21T18:14:37.200 に答える