如何在我的应用程序中实现android gif编码器?

时间:2013-12-11 23:27:16

标签: android animation gif encoder

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

我在我的Android应用程序中尝试实现此错误。

以下错误是:

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

  2. public boolean finish(){ 描述资源路径位置类型 返回类型与Activity.finish()不兼容AnimatedGifEncoder.java / f / src / net / s / f第164行Java问题

  3. 公共字节[] onClick(查看v){ 描述资源路径位置类型 返回类型与View.OnClickListener.onClick(View)不兼容Main.java / f / src / net / s / f第180行Java问题

  4. 我的代码如下:

    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()函数是一种立即返回图像适配器中所有Bitmap文件的方法。因此输入是一个适配器中的所有Bitmap文件,输出是一个字节数组,您可以写入该文件。

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

2 个答案:

答案 0 :(得分:2)

如果要将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();
}

答案 1 :(得分:0)

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