Как загрузить галерею изображений с ArrayList Android - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть динамическое значение изображений, которые хранятся в миниатюрах массива, которые я хочу показать в галерее.строковые значения внутри массива - это пути к изображениям миниатюр (например, /mnt/sdcard/MyApp/Thumbnails/thumb1.png)....

у меня есть этот код:

class ImageAdapter extends BaseAdapter {
    int mGalleryItemBackground;
    private Context mContext;

    private ArrayList<String> thumbnails = new ArrayList<String>();


    public ImageAdapter(Context c, ArrayList<String> thumb) {
        mContext = c;
        System.out.print("thumbs: " + thumb);
        thumbnails = thumb;
    }

    public int getCount() {
        return thumbnails.size();
    }

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

    public long getItemId(int position) {
        return position;
    }



   public View getView(int position, View convertView, ViewGroup parent) {
      ImageView imageView = new ImageView(mContext);
      BitmapFactory.Options options = new BitmapFactory.Options();
      options.inSampleSize = 0;
      Bitmap bm = BitmapFactory.decodeFile(thumbnails.get(i), options);
      imageView.setImageBitmap(bm); 
      imageView.setLayoutParams(new LayoutParams(150, 150));
      imageView.setScaleType(ImageView.ScaleType.FIT_XY);
      return imageView;
    }
}

и этот код / ​​метод для отображения вида галереи из основного класса:

Gallery gal1;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    gal1 = (Gallery) this.findViewById(R.id.gallery1);
}

private void setDisplay(){

    OnItemClickListener myItemClickListener = new OnItemClickListener() {
      @Override
      public void onItemClick (AdapterView<?> parent, View v, int position, long id) {
        Toast.makeText(Main.this, "" + position, Toast.LENGTH_SHORT).show();
      };
    };

  gal1.setAdapter(new ImageAdapter(this, _paththumb));
}

как загрузить изображения из массива?

ОБНОВЛЕНО: я использовал ваш код zrgui иЛогкат сказал:

02-07 12:31:56.046: E/AndroidRuntime(3572): FATAL EXCEPTION: main
02-07 12:31:56.046: E/AndroidRuntime(3572): java.lang.ClassCastException: android.view.ViewGroup$LayoutParams
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.widget.Gallery.setUpChild(Gallery.java:769)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.widget.Gallery.makeAndAddView(Gallery.java:738)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.widget.Gallery.layout(Gallery.java:622)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.widget.Gallery.onLayout(Gallery.java:336)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.view.View.layout(View.java:7035)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1238)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1044)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.view.View.layout(View.java:7035)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.view.View.layout(View.java:7035)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.widget.ScrollView.onLayout(ScrollView.java:1205)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.view.View.layout(View.java:7035)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.widget.RelativeLayout.onLayout(RelativeLayout.java:909)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.view.View.layout(View.java:7035)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.view.View.layout(View.java:7035)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.view.View.layout(View.java:7035)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.os.Looper.loop(Looper.java:123)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at android.app.ActivityThread.main(ActivityThread.java:4627)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at java.lang.reflect.Method.invokeNative(Native Method)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at java.lang.reflect.Method.invoke(Method.java:521)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-07 12:31:56.046: E/AndroidRuntime(3572):     at dalvik.system.NativeStart.main(Native Method)

1 Ответ

0 голосов
/ 07 февраля 2012

Если у вас есть пути к изображениям в _paththumb при инициализации ImageAdapter, то все должно быть в порядке.Также не забудьте вызвать setDisplay ().

Вам также следует оптимизировать метод getView там, потому что вы создаете новые ImageViews вместо их повторного использования (таким образом, аннулируется вся цель адаптера).

Редактировать: оптимизация getView:

  public View getView(int position, View convertView, ViewGroup parent) {
          ImageView imageView = (ImageView)convertView;
          if (imageView == null) {
             imageView = new ImageView(mContext);
          }
          BitmapFactory.Options options = new BitmapFactory.Options();
          options.inSampleSize = 0;
          Bitmap bm = BitmapFactory.decodeFile(thumbnails.get(i), options);
          imageView.setImageBitmap(bm); 
          imageView.setLayoutParams(new LayoutParams(150, 150));
          imageView.setScaleType(ImageView.ScaleType.FIT_XY);
          return imageView;
    }
...