我的应用程序由天ListView的每一天都有其特定的图像放置在一个无限画廊类的,什么即时试图做的是:
从节能应用绘制资源(无限画廊类)与连续的数字图像,以SD卡 ,
IM试图让保存的图像的序列号如下:
第一图像:图像-1.png。
第二图像:图像-2.png。
第三图像:图像-3.png,
等所有dayes。
使用:
Random generator = new Random();
这将导致:
第一个问题 :用随机数字保存的图像。
第二个问题 :它不是保存所有的图像是由用户选择保存到SD卡也保存了一些图像的2〜3倍。
这是这关系到保存图像的代码部分:
View vi=convertView;
final ViewHolder holder;
if(convertView==null){
vi = inflater.inflate(R.layout.gallery_items, null);
holder=new ViewHolder();
holder.text=(TextView)vi.findViewById(R.id.textView1);
holder.image=(ImageView)vi.findViewById(R.id.image);
holder.button=(Button)vi.findViewById(R.id.button_save);
bm = BitmapFactory.decodeResource( mContext.getResources(), images[itemPos]);
holder.image.setImageBitmap(bm);
holder.button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
String root = Environment.getExternalStorageDirectory().toString();
File imagesFolder = new File(root + "/Days pictures");
imagesFolder.mkdirs();
Random generator = new Random();
int n = 1000;
n = generator.nextInt(n);
String fname = "Image-"+ n +".png";
File file = new File (imagesFolder, fname);
if (file.exists ())
file.delete ();
try {
FileOutputStream out = new FileOutputStream(file);
bm.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
Toast.makeText(mContext, "Saved", Toast.LENGTH_LONG).show();}
catch (Exception e) {
e.printStackTrace();
Toast.makeText(mContext, e.toString(), Toast.LENGTH_SHORT).show();}}});
vi.setTag(holder);}
else holder=(ViewHolder)vi.getTag();
holder.text.setText(name[itemPos]);
final int stub_id=images[itemPos];
holder.image.setImageResource(stub_id);
return vi; }
private ImageView getImageView() {
ImageView i = new ImageView(mContext);
return i; } }
谢谢你的帮助 。
从你的问题和意见,我可以理解,你要保存的图像到SD卡的n个。
为了节省后续步骤
第1步 :获取您需要的所有图像。 确保你正确及彼图像列表。
第2步 :计算图像的数量在列表中,并存储在variale
int numberOfImages = 15;// Get it dynamically
第3步 :现在循环它来存储按顺序全部图像
//Create Directory to store images in SDCard
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/saved_images");
if(!myDir.exists()){
myDir.mkdirs();
}
// You have to get next image here from the resource here
bm = BitmapFactory.decodeResource( mContext.getResources(), images[i]);// value for itemPos should be given here.
// Get Last Saved Number
SharedPreferences savedNumber = getSharedPreferences(PREFS_NAME, 0);
int lastSavedNumber = savedNumber.getInt("lastsavednumber",0);
lastSavedNumber++;
String fname = "Image-"+lastSavedNumber+".png";
File file = new File (myDir, fname);
if (file.exists ()) {file.delete (); }
try {
FileOutputStream out = new FileOutputStream(file);
bm.compress(Bitmap.CompressFormat.JPEG, 90, out);//Your Bitmap from the resouce
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
//To Store the last Number
SharedPreferences saveNumber = getApplicationContext().getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editorset = saveNumber.edit();
editorset.putInt("lastsavednumber",lastSavedNumber);
editorset.commit();
如果你做任何事情错在你的第一个步骤中的复制可以发生。
编辑来存储顺序使用SharedPreferences全部图像最后存储保存的图像数量。
public static final String PREFS_NAME = "ImageNumber";
// Get Last Saved Number
SharedPreferences savedNumber = getSharedPreferences(PREFS_NAME, 0);
int lastSavedNumber = savedNumber.getInt("lastsavednumber",0);
lastSavedNumber++;
String fname = "Image-"+lastSavedNumber+".png";
//To Store Last Saved Number
SharedPreferences saveNumber = getApplicationContext().getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editorset = saveNumber.edit();
editorset.putInt("lastsavednumber",lastSavedNumber);
editorset.commit();
只需使用for
循环。 如果你得到你想要多少图像保存在SD卡上,然后大小,
for(int n=1 ; n <= size ; n++){
String fname = "Image-"+ n +".png";
// you other stuff here
}
希望这可以帮助你。
原谅随机的,如果你想在顺序图像(Pragnani建议你也同意了以上评论),并假定你的代码是确定的,这样做:
Override
public void onClick(View arg0) {
String root = Environment.getExternalStorageDirectory().toString();
File imagesFolder = new File(root + "/imagesFolder");
imagesFolder.mkdirs();
for (int i = 0; i < 10; i++) {
String fname = "Image-" + i + ".png";
File file = new File (imagesFolder, fname);
if (file.exists ()) file.delete ();
try {
FileOutputStream out = new FileOutputStream(file);
bm.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
Toast.makeText(MainActivity.this, "Saved", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, e.toString(), Toast.LENGTH_SHORT).show();
}
}
}
测试它,让我知道。