2016-10-03 3 views
2

Ich bin neu Android und ich möchte GIF-Bild in SD-Karte durch Android-Programmierung zu speichern. ZZ hatte ich etwas Code von Google getan, um GIF-Bild in sdcard zu speichern. Aber wenn ich dieses Bild auf SD Karte speichere, wird es normales Bild nicht GIF Bild anzeigen.So speichern Sie GIF-Bild in SD-Karte?

Hier ist mein Code GIF-Bild anzuzeigen

//Save code 
    save.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Bitmap image = BitmapFactory.decodeResource(getResources(), 
        R.drawable.gpp3); 
      File outputFile = new File("/sdcard/gpp3.gif"); 
      FileOutputStream fos = null; 
      try { 
       fos = new FileOutputStream(outputFile); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 

      if (fos != null) { 
       AnimatedGifEncoder gifEncoder = new AnimatedGifEncoder(); 
       gifEncoder.start(fos); 
       gifEncoder.addFrame(image); 
       gifEncoder.finish(); 
      } 

     } 
    }); 

Also, was ist das Problem in oben code.Please mir sagen.

+0

https://github.com/madmaw/animatedgifencoder/ –

+0

Sie gar nicht verwenden BitmapFactory. Verwenden Sie keinen AnimatedGiffEncoder. Sie haben bereits ein gif-Bild in drawables, nehme ich an. Also kopiere es einfach in das Dateisystem. – greenapps

+0

@greenapps, wenn ich Ihren Weg benutze, wird es angezeigt .jpg Erweiterung und Bild ist .gif –

Antwort

5

Ich bin nicht sicher, aber wie pro Ihre Anforderung sollten Sie zunächst Ihre GIF öffnen und dann, nachdem Sie in Byte-Array konvertieren dann nach dem Speichern it.i hoffen, dass Sie Ihre Lösung

private void saveGIF() 
    { 
     try 
     { 
      File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "shared_gif_shai" + System.currentTimeMillis() + ".gif"); 

      long startTime = System.currentTimeMillis(); 

      Log.d(TAG, "on do in background, url open connection"); 

      InputStream is = getResources().openRawResource(R.drawable.g); 
      Log.d(TAG, "on do in background, url get input stream"); 
      BufferedInputStream bis = new BufferedInputStream(is); 
      Log.d(TAG, "on do in background, create buffered input stream"); 

      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      Log.d(TAG, "on do in background, create buffered array output stream"); 

      byte[] img = new byte[1024]; 

      int current = 0; 

      Log.d(TAG, "on do in background, write byte to baos"); 
      while ((current = bis.read()) != -1) { 
       baos.write(current); 
      } 


      Log.d(TAG, "on do in background, done write"); 

      Log.d(TAG, "on do in background, create fos"); 
      FileOutputStream fos = new FileOutputStream(file); 
      fos.write(baos.toByteArray()); 

      Log.d(TAG, "on do in background, write to fos"); 
      fos.flush(); 

      fos.close(); 
      is.close(); 
      Log.d(TAG, "on do in background, done write to fos"); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

bekommen und auch Geben diese Erlaubnis in Ihnen AndroidMenifest.xml Datei

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
+0

Danke..Es funktioniert .. –

+0

es funktioniert perfekt für mich .. vielen Dank! –