以前有遇到過一個要用多張圖片合成gif圖的場景,當時是搜索了很久,也沒有發現有相關的使用記錄。後來找到了實現方式,特此記錄。
使用了Github上該project:android-gif-encoder,代碼連接見頁尾。java
主要代碼以下:android
/** * 生成gif圖 * * @param file_name 保存文件名 * @param delay 幀之間間隔的時間 */ private void createGif(String file_name, int delay) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); AnimatedGifEncoder localAnimatedGifEncoder = new AnimatedGifEncoder(); localAnimatedGifEncoder.start(baos);//start localAnimatedGifEncoder.setRepeat(0);//設置生成gif的開始播放時間。0爲當即開始播放 localAnimatedGifEncoder.setDelay(delay); if (pics.isEmpty()) { localAnimatedGifEncoder.addFrame(BitmapFactory.decodeResource(getResources(), R.drawable.pic_1)); localAnimatedGifEncoder.addFrame(BitmapFactory.decodeResource(getResources(), R.drawable.pic_2)); localAnimatedGifEncoder.addFrame(BitmapFactory.decodeResource(getResources(), R.drawable.pic_3)); } else { for (int i = 0; i < pics.size(); i++) { // Bitmap localBitmap = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(pics.get(i)), 512, 512); localAnimatedGifEncoder.addFrame(BitmapFactory.decodeFile(pics.get(i))); } } localAnimatedGifEncoder.finish();//finish File file = new File(Environment.getExternalStorageDirectory().getPath() + "/GIFMakerDemo"); if (!file.exists()) file.mkdir(); String path = Environment.getExternalStorageDirectory().getPath() + "/GIFMakerDemo/" + file_name + ".gif"; Log.d(TAG, "createGif: ---->" + path); try { FileOutputStream fos = new FileOutputStream(path); baos.writeTo(fos); baos.flush(); fos.flush(); baos.close(); fos.close(); } catch (IOException e) { e.printStackTrace(); } gif_image.setImageURI(Uri.parse(path)); Toast.makeText(MainActivity.this, "Gif已生成。保存路徑:\n" + path, Toast.LENGTH_LONG).show(); }
須要源碼的同窗看這裏git