2012-06-18 3 views
1

У меня есть рабочая галерея, которая показывает одну картинку за раз и может быть «пробита», чтобы вращаться по изображениям. Я хочу, чтобы пользователь мог просматривать 2 или 3 снимка за раз, используя меню и выбрав, сколько показов. Пока я пытался настроить ширину галереи, а также параметры LinearLayout и все сбой Activity. Любой совет будет принят во внимание. Я объявляю и инициализирую галерею здесь, и у меня есть метод 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; 
} 

Это класс Adapter Изображение для галереи

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 

ответ

0

В адаптере, Использование Вид объекта (WITN пользовательский вид) и положить ImageView внутри него.

Это вы можете разместить несколько изображений для каждого вида.

Наилучшие результаты могут быть достигнуты с помощью нескольких файлов макета, основанных на количестве изображений и правильном в соответствии с выбором пользователя.

Дайте мне знать, если вам нужен более конкретный шаблон кода.

+0

Мне удалось увеличить размер галереи, когда пользователь выбирает, сколько изображений они хотят видеть за один раз, но изображение в фокусе всегда сосредоточено так, что когда я удваиваю ширину галереи, чтобы сделать ее достаточно широкой для 2 изображения, он показывает одну центрированную и половину изображения с каждой стороны. Я попытался использовать настройки силы тяжести, чтобы заставить первичную картинку оставить, но не повезло. – foltzy7

Смежные вопросы