1

我有一个工作图库,一次显示一张图片,并且可以“滑动”以旋转图像。我希望用户可以通过使用菜单并选择要显示的数量来一次查看 2 或 3 张图片。到目前为止,我已经尝试调整 Gallery 宽度和 LinearLayout 参数,并且都使 Activity 崩溃。任何意见,将不胜感激。我在这里声明并初始化 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;
}

这是画廊的图像适配器类

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 回答