我一直致力于创建图像的网格视图,图像存在于Assets文件夹中。 Opening a File from assets folder in android链接帮助我使用位图来读取它。我目前的代码是:
public View getView(final int position, View convertView, ViewGroup parent)
{
try
{
AssetManager am = mContext.getAssets();
String list[] = am.list("");
int count_files = imagelist.length;
for(int i= 0;i<=count_files; i++)
{
BufferedInputStream buf = new BufferedInputStream(am.open(list[i]));
Bitmap bitmap = BitmapFactory.decodeStream(buf);
imageView.setImageBitmap(bitmap);
buf.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
我的应用程序确实从Assets文件夹中读取图像,但它没有遍历网格视图中的单元格。网格视图的所有单元格具有从该组图像中拾取的相同图像。谁能告诉我如何遍历细胞并仍然有不同的图像?
我在ImageAdapter类中有上面的代码,它扩展了BaseAdapter类,在我的主类中,我将它与我的gridview链接:
GridView gv =(GridView)findViewById(R.id.gridview);
gv.setAdapter(new ImageAdapter(this, assetlist));
非常感谢您提前提供任何帮助, 萨兰
答案 0 :(得分:19)
Saran,下面是我用来在图库资产文件夹中显示图片的方法。我想这与gridview的处理相同:
public class myActivitye extends Activity
{
private Gallery mGallery;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mGallery = (Gallery) findViewById(R.id.mygalleryinxml);
//load images into memory
mBitArray = new Bitmap[4];
try
{
//these images are stored in the root of "assets"
mBitArray[0] = getBitmapFromAsset("pic1.png");
mBitArray[1] = getBitmapFromAsset("pic2.png");
mBitArray[2] = getBitmapFromAsset("pic3.png");
mBitArray[3] = getBitmapFromAsset("pic4.png");
}
catch (IOException e)
{
e.printStackTrace();
}
mGallery.setAdapter(new GalleryAdapter(this, mBitArray));
}
public class GalleryAdapter extends BaseAdapter
{
//member variables
private Context mContext;
private Bitmap[] mImageArray;
//constructor
public GalleryAdapter(Context context, Bitmap[] imgArray)
{
mContext = context;
mImageArray = imgArray;
}
public int getCount()
{
return mImageArray.length;
}
public Object getItem(int position)
{
return position;
}
public long getItemId(int position)
{
return position;
}
//returns the individual images to the widget as it requires them
public View getView(int position, View convertView, ViewGroup parent)
{
final ImageView imgView = new ImageView(mContext);
imgView.setImageBitmap(mImageArray[position]);
//put black borders around the image
final RelativeLayout borderImg = new RelativeLayout(mContext);
borderImg.setPadding(20, 20, 20, 20);
borderImg.setBackgroundColor(0xff000000);//black
borderImg.addView(imgView);
return borderImg;
}
}//end of: class GalleryAdapter
/**
* Helper Functions
* @throws IOException
*/
private Bitmap getBitmapFromAsset(String strName) throws IOException
{
AssetManager assetManager = getAssets();
InputStream istr = assetManager.open(strName);
Bitmap bitmap = BitmapFactory.decodeStream(istr);
istr.close();
return bitmap;
}
}
答案 1 :(得分:3)
无需每次都阅读所有项目。只读取getView方法调用中给出的位置处的项目。并且只显示那个时间项目。
BufferedInputStream buf = new BufferedInputStream(am.open(list[position]));