package com.leepood.gifmaker;
import android.graphics.Bitmap; import android.util.Log; public class GifUtil { private final String TAG=this.getClass().getName(); static { System.loadLibrary("gifflen"); } /** * Init the gif file * @param gifName name * @param w width * @param h height * @param numColors colors * @param quality * @param frameDelay times * @return */ public native int Init(String gifName, int w, int h, int numColors, int quality, int frameDelay); /* * close * */ public native void Close(); public native int AddFrame(int[] pixels); /** * encode the bitmaps to gif * @param fileName * @param bitmaps * @param delay */ public void Encode(String fileName,Bitmap[] bitmaps,int delay) { if(bitmaps==null||bitmaps.length==0) { throw new NullPointerException("Bitmaps should have content!!!"); } int width=bitmaps[0].getWidth(); int height=bitmaps[0].getHeight(); if(Init(fileName,width,height,256,100,delay)!=0) { Log.e(TAG, "GifUtil init failed"); return; } for(Bitmap bp:bitmaps) { int pixels[]=new int[width*height]; bp.getPixels(pixels, 0, width, 0, 0, width, height); AddFrame(pixels); } Close(); } }
首先NDK的环境搭建我就不讲了,这些可以查网上的,首选去http://jiggawatt.org/badc0de/android/index.html#gifflen 下载gifflen的源码来编译。下载到源码之后我们要做的就是修改下方法名称,NDK里面书写方法的名称需同你native 类的包名相同,举个例子我的native方法类的完整路径是:com.leepood.gifmaker.GifUtil 那么我需要将下载回来的源码里面的jni call的方法名称改为以Java_com_leepood_gifmaker_GitUtil_开头,这样一切就OK拉,于是NDK编译得到libgifflen.so文件,于是在java里面调用,如上代码
GIF播放使用 http://code.google.com/p/gifview/