我只是写了一个小测试应用程序,在Android上显示图像库(从SD卡),除了我看到照片的部分外,它都运行得很好。如果有人能发现我的麻烦来源......
大部分代码都是从我发现的各种例子中复制和粘贴的。
Android Screenshot http://openhomesnz.com/alister/permalink/androidpictures.jpg
请注意图库中缺少图像。
我猜我在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;
}
}
}
答案 0 :(得分:0)
好的解决方案是相当明显的 - 如果我对Java更熟悉,我可能会立即发现它。
而不是
String filename = photos[position].getName();
我应该有
String filename = photos[position].getAbsolutePath();