【问题标题】:How do I implement the android gif encoder in my app?如何在我的应用程序中实现 android gif 编码器?
【发布时间】:2013-12-30 04:35:03
【问题描述】:

我正在尝试使用这个 Android Gif 编码器 https://github.com/nbadal/android-gif-encoder/blob/master/GifEncoder.java

我在尝试在我的 Android 应用中实现此功能时遇到错误。

以下错误是:

  1. outStream.write(generateGIF()); 说明 资源路径 位置 类型 未定义类型 new View.OnClickListener(){} Main.java /f/src/net/s/f 第 197 行 Java 问题的 generateGIF() 方法

  2. 公共布尔完成(){ 说明 资源路径 位置 类型 返回类型与Activity.finish() AnimatedGifEncoder.java /f/src/net/s/f 第164行Java问题不兼容

  3. public byte[] onClick(View v) { 说明 资源路径 位置 类型 返回类型不兼容 View.OnClickListener.onClick(View) Main.java /f/src/net/s/f 第180行Java问题

我的代码如下:

save.setOnClickListener(new OnClickListener() {

@Override
public byte[] onClick(View v) {
    // TODO Auto-generated method stub              


    ArrayList<Bitmap> bitmaps = adapter.getBitmapArray();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    AnimatedGifEncoder encoder = new AnimatedGifEncoder();
    encoder.start(bos);
    for (Bitmap bitmap : bitmaps) {
        encoder.addFrame(bitmap);
    }
    encoder.finish();
    return bos.toByteArray();

    FileOutputStream outStream = null;
    try{
        outStream = new FileOutputStream("/sdcard/generate_gif/test.gif");
        outStream.write(generateGIF());
        outStream.close();
    }catch(Exception e){
        e.printStackTrace();
    }

    Toast.makeText(Main.this, "Saved.", Toast.LENGTH_SHORT).show();

}
});

/////////////////////////////////////// ///////////////

要使用这个类,这里​​有一个生成 GIF 字节数组的示例帮助方法。注意这里的 getBitmapArray() 函数是一种一次返回图像适配器中所有位图文件的方法。所以输入是一个适配器中的所有位图文件,输出是一个字节数组,您可以将其写入文件。

public byte[] generateGIF() {
    ArrayList<Bitmap> bitmaps = adapter.getBitmapArray();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    AnimatedGifEncoder encoder = new AnimatedGifEncoder();
    encoder.start(bos);
    for (Bitmap bitmap : bitmaps) {
        encoder.addFrame(bitmap);
    }
    encoder.finish();
    return bos.toByteArray();
}

要使用此功能,请执行以下操作,然后您可以将文件保存到 SD 卡中。

FileOutputStream outStream = null;
        try{
            outStream = new FileOutputStream("/sdcard/generate_gif/test.gif");
            outStream.write(generateGIF());
            outStream.close();
        }catch(Exception e){
            e.printStackTrace();
        }

【问题讨论】:

  • 编译器已经给你答案了。毫无意义的问题。

标签: android animation gif encoder


【解决方案1】:

如果您想将 gif 直接保存在文件中,您的 onClick() 方法应该如下所示:

@Override
public void onClick(View v) {
    ArrayList<Bitmap> bitmaps = adapter.getBitmapArray();
    File outputFile = new File("/sdcard/generate_gif/test.gif");
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(outputFile);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    if (fos != null) {
        AnimatedGifEncoder gifEncoder = new AnimatedGifEncoder();
        gifEncoder.start(fos);

        for (Bitmap bitmap : bitmaps) {
            gifEncoder.addFrame(bitmap);
        }

        gifEncoder.finish();
    }

    Toast.makeText(Main.this, "Saved.", Toast.LENGTH_SHORT).show();
}

【讨论】:

    【解决方案2】:

    在 click() 上的返回类型必须为 void。

    【讨论】:

      猜你喜欢
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多