2013-03-27 80 views
1

我的應用程序由天ListView的每一天都有其特定的圖像放置在一個無限畫廊類的,有什麼即時試圖做的是:編號圖像從應用程序資源保存到SD卡

與序列號保存圖像從應用程序繪製資源(無限畫廊類)SD卡

IM試圖讓保存的圖像的序列號如下:

第一圖片:圖片-1.png。

第二張圖:Image-2.png。

第三張圖片:Image-3.png,

等等。

使用:

Random generator = new Random(); 

這將導致:

第一個問題:保存的圖像與隨機數。

第二期:它不保存所有圖像被用戶選擇保存到SD卡也保存一些圖像兩次或三次。

這是代碼與保存圖像的一部分:

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; } } 

感謝您的幫助。

+4

如果你想在順序圖像爲什麼你生成隨機數..? – Pragnani 2013-03-27 17:50:35

+0

@Pragnani請告訴我如何正確的方式即時通訊新的Android,謝謝 – androidqq6 2013-03-27 18:03:18

+2

以n爲字段,每當你保存圖像時n增加n .. – Pragnani 2013-03-27 18:04:40

回答

0

從你的問題和意見,我可以理解你想保存n張圖片到SDCard。

要保存按照步驟

STEP 1:獲取你所需要的所有圖像。確保您在這裏正確獲取圖像列表。

STEP 2:計算圖像的數量在列表中,並存儲在variale

 int numberOfImages = 15;// Get it dynamically 

STEP 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(); 
+0

我親愛的朋友我仍然是新的發展但是你的意思是:// itemPos的值應該在這裏給出。 在你的答案,即時嘗試解決我的問題,然後我會更新我的帖子檢查它,謝謝 – androidqq6 2013-04-15 11:34:21

+0

我想問一個問題。從哪裏獲得圖像?以及你如何獲得這個形象?你可以更新代碼 – GoCrazy 2013-04-15 11:54:52

+0

我會更新我的帖子中的整個活動,其中包括爲保存圖像的循環更清晰我的朋友,謝謝 – androidqq6 2013-04-15 11:57:10

0

只需使用for循環即可。如果你得到大小多少圖像你想要保存在SD卡然後,

for(int n=1 ; n <= size ; n++){ 
String fname = "Image-"+ n +".png"; 
// you other stuff here 
} 

希望這可以幫助你。

+0

我替換這個:Random generator = new Random(); \t int n = 10000; \t n = generator.nextInt(n); \t String fname =「Image - 」+ n +「。png」;用你的代碼:for(int n = 1; n <= size; n ++){ String fname =「Image - 」+ n +「。png」; 但它不保存圖像到SD文件夾 – androidqq6 2013-03-28 08:16:19

+0

@ androidqq6:把你的代碼片段存儲在SD卡上的圖像從應用程序瞭解解決你的問題。 – 2013-03-28 10:28:05

+0

@ androidqq6:你是否在保存像這樣的圖像之前創建位圖,位圖bm = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);請參閱下面的鏈接更多詳細信息http://stackoverflow.com/questions/10558053/save-image-to-sdcard-from-drawble-resource-on-android – 2013-03-28 10:48:57

0

原諒隨機的,如果你想在順序圖像(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(); 
      } 
     } 
    } 

測試它,讓我知道。

+0

我以前試過,當按一次保存按鈕,它可以同時保存10張圖像依次顯示圖像-1,圖像-10,圖像-2,圖像-3等等 – androidqq6 2013-04-13 11:40:17

+0

@ androidqq6我編輯了(...) , 一探究竟。 – JJ86 2013-04-13 12:00:32

+0

我的朋友,我的上面的代碼是完整的項目的一部分,要清楚我將更新與全班包括圖片保存的職位,最好了解 – androidqq6 2013-04-13 12:51:11