1

我只是在编写一个小测试应用程序来显示 Android 上的图像库(来自 SD 卡),除了我可以看到照片的部分之外,它都运行良好。如果有人能发现我麻烦的根源。

大部分代码都是从我找到的各种示例中复制和粘贴的。

安卓截图]([[1]

请注意图库中缺少图像。

我猜我在getView做错了什么:

    public View getView(int position, View convertView, ViewGroup parent) {
     ImageView imgView;
     if (convertView == null)
      imgView = new ImageView(cont);
     else
      imgView = (ImageView)convertView;

        String filename = photos[position].getName();
        Log.i(TAG, "Loading File " + filename);
        Bitmap bMap = BitmapFactory.decodeFile(filename);
        imgView.setImageBitmap(bMap);

        imgView.setLayoutParams(new Gallery.LayoutParams(120, 90));
        imgView.setScaleType(ImageView.ScaleType.FIT_XY);
        imgView.setBackgroundResource(GalItemBg);

        return imgView;
    }

整个活动如下 - 如果问题出在其他地方

 package nz.co.salespartner.gallerytest;

 import java.io.File;
 import java.io.FilenameFilter;

 import android.app.Activity;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.Gallery;
 import android.widget.ImageView;
 import android.widget.TextView;

 public class GalleryTestActivity extends Activity {
  File photos[];
  private static String TAG = "GalleryTest";
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         File f = new File("/sdcard/pics1");
         photos = f.listFiles(new FilenameFilter() {  
    @Override
    public boolean accept(File dir, String filename) {
     return filename.endsWith("jpg");
    }
   });
         String fileList = "";      
         for (File aFile : photos) {
          fileList += aFile.getName() + "\n";
         }
         TextView v = (TextView)findViewById(R.id.FileList);
         v.setText(fileList);

         Gallery gallery = (Gallery)findViewById(R.id.Gallery);
         gallery.setAdapter(new AddImgAdp(this));
     }

     public class AddImgAdp extends BaseAdapter {
         int GalItemBg;
         private Context cont;

         public AddImgAdp(Context c) {
             cont = c;
             TypedArray typArray = obtainStyledAttributes(R.styleable.GalleryTheme);
             GalItemBg = typArray.getResourceId(R.styleable.GalleryTheme_android_galleryItemBackground, 0);
             typArray.recycle();
         }

         public int getCount() {
             return photos.length;
         }

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

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

         public View getView(int position, View convertView, ViewGroup parent) {
          ImageView imgView;
          if (convertView == null)
           imgView = new ImageView(cont);
          else
           imgView = (ImageView)convertView;

             String filename = photos[position].getName();
             Log.i(TAG, "Loading File " + filename);
             Bitmap bMap = BitmapFactory.decodeFile(filename);
             imgView.setImageBitmap(bMap);

             imgView.setLayoutParams(new Gallery.LayoutParams(120, 90));
             imgView.setScaleType(ImageView.ScaleType.FIT_XY);
             imgView.setBackgroundResource(GalItemBg);

             return imgView;
         }
     }
 }
4

1 回答 1

0

好的,解决方案相当明显——如果我更熟悉 Java,我可能会立即发现它。

代替

String filename = photos[position].getName();

我应该有

String filename = photos[position].getAbsolutePath();
于 2010-12-06T00:42:36.997 回答