1

一度に1枚の写真を表示し、「スワイプ」して画像を回転できる作業中のギャラリーがあります。メニューを使用して表示する枚数を選択することで、ユーザーが一度に 2 枚または 3 枚の写真を表示できるようにしたいと考えています。これまでのところ、ギャラリーの幅を調整しようとしましたが、LinearLayout パラメータとすべてがアクティビティをクラッシュさせました。アドバイスをいただければ幸いです。ここで Gallery を宣言して初期化し、onOptionsItemSelected メソッド sekeleton を持っています。

public class SpeechAppActivity extends Activity implements OnClickListener{
//Menu Items


// Class variables
Gallery myGallery;
ImageView imageView;
MyDBAdapter db;
Item item1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    db = new MyDBAdapter(this);

    db.insertEntry(item1 = new Item("Bathtub", "Bathroom", "Typical", "Clean", "fill, wash", "Round, deep", "Bathroom", "Toilet, Bathroom", R.drawable.ic_launcher));
    Log.i("item", "item: " + item1.toString());

 // Bind the gallery defined in the main.xml
        // Apply a new (customized) ImageAdapter to it.

        myGallery = (Gallery) findViewById(R.id.myGallery);

        myGallery.setAdapter(new ImageAdapter(this));
        //myGallery.setLayoutParams(new Gallery.LayoutParams(250, 250));

        myGallery.setOnItemSelectedListener(new OnItemSelectedListener() {

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

            }

            public void onNothingSelected(AdapterView<?> parent) {

            }


        });
public boolean onOptionsItemSelected(MenuItem menuItem) {
    switch (menuItem.getItemId()) {
    case R.id.settings:
        startActivity(new Intent(this, Prefs.class));
        return true;

    case R.id.show1:

        //myGallery.findViewById(R.id.myGallery).setLayoutParams(new Gallery.LayoutParams(500, 250));
        return true;

    case R.id.show2:

        //myGallery.findViewById(R.id.myGallery).setLayoutParams(new Gallery.LayoutParams(500, 250));

        return true;
    case R.id.show3:

        //myGallery.findViewById(R.id.myGallery).setLayoutParams(new Gallery.LayoutParams(500, 250));
        return true;
    }
    return false;
}

これは、Gallery のイメージ アダプター クラスです。

public class ImageAdapter extends BaseAdapter {
/** The parent context */
private Context myContext;
// Put some images to project-folder: /res/drawable/
// format: jpg, gif, png, bmp, ...
private int[] myImageIds = { R.drawable.apple, R.drawable.orange,
               R.drawable.ic_launcher };

/** Simple Constructor saving the 'parent' context. */
public ImageAdapter(Context c) {
    this.myContext = c;
}

// inherited abstract methods - must be implemented
// Returns count of images, and individual IDs
public int getCount() {
    return this.myImageIds.length;
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}
// Returns a new ImageView to be displayed,
public View getView(int position, View convertView, 
        ViewGroup parent) {

    // Get a View to display image data                     
    ImageView iv = new ImageView(this.myContext);
    iv.setImageResource(this.myImageIds[position]);

    // Image should be scaled somehow
    //iv.setScaleType(ImageView.ScaleType.CENTER);
    iv.setScaleType(ImageView.ScaleType.CENTER_CROP);           
    //iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
    //iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
    //iv.setScaleType(ImageView.ScaleType.FIT_XY);
    //iv.setScaleType(ImageView.ScaleType.FIT_END);
    //iv.setScaleType(ImageView.ScaleType.FIT_START);


    // Set the Width & Height of the individual images
        //get scale for finding dip of a set # of pixels
    final float scale = parent.getContext().getResources().getDisplayMetrics().density;

    iv.setLayoutParams(new Gallery.LayoutParams((int) (300 * scale + 0.5f), (int) (250 * scale + 0.5f)));

    return iv;
}

}// ImageAdapter
4

1 に答える 1

0

アダプターで、View オブジェクトを使用して (カスタム ビューで)、その中に ImageView を配置します。

これは、ビューごとに複数の画像を配置できるというものでした。

画像の数に基づいて少数のレイアウト ファイルを使用し、ユーザーの選択に応じて適切なレイアウト ファイルを使用することで、最良の結果を得ることができます。

より具体的なコード テンプレートが必要な場合はお知らせください。

于 2012-06-18T01:36:40.690 に答える