全部产品

GIF

GIF 图播放控件(APMGifView)继承 ImageView,支持解码播放 GIF 动画,仅提供标准控件功能,对 GIF 图片做解码和展示,不进行下载。

相关依赖

在接入该服务之前,您需要在相应工程中添加以下依赖:

  • Bundle 依赖

    • Gradle 依赖
             
      1. provided 'com.alipay.multimedia:apwidget-build:1.0.3:api@jar'
  • Portal 依赖

    • 修改 slink,在 slink 文件中添加以下代码:
             
      1. com.alipay.multimedia-apwidget
    • Multimedia 相关依赖
             
      1. com.alipay.android.phone.mobilecommon:multimedia-build 1.12.0.161201160212
      2. com.alipay.android.phone.mobilecommon:multimediabiz-build 1.12.0.161206164506
      3. com.alipay.multimedia:apwidget-build 1.0.3.161206164506

API 说明

  • public void setMaxLimit(int maxSideLimit, int maxSizeLimit)

    设定最大限制,必须在 init 前调用,不然只能下一次生效。maxSideLimit 表示最大边限制,maxSizeLimit 表示最大像素限制,maxSideLimit 的优先级高于 maxSizeLimit

  • public int init(String path)

    设定 GIF 图片的路径,每次更新 GIF 图,都需要重新 init。

  • public int init(String path, int bufSize)

    设定 GIF 图片的路径,指定每次读取文件的 bufferSize

  • public void setDefaultDrawable(Drawable drawable)

    设定 GIF 图片异常时显示的 drawable

  • public int startAnimation()

    开始播放动画,默认会自动初始化。

  • public int startAnimation(boolean autoInit)

    开始播放动画,autoInit 为 true 时,会根据情况进行 init。

  • public int pauseAnimation()

    暂停播放动画

  • public void stopAnimation()

    停止播放动画

代码示例

   
  1. public class GifActivity extends BaseActivity implements AbsListView.OnScrollListener {
  2. private static final String TAG = "GifView";
  3. private ListView mListView;
  4. private AsyncTask<Void, Void, List<File>> mAsyncTask;
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. mListView = new ListView(this);
  9. ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
  10. setContentView(mListView, params);
  11. mListView.setOnScrollListener(this);
  12. mAsyncTask = new AsyncTask<Void, Void, List<File>>() {
  13. @Override
  14. protected List<File> doInBackground(Void... params) {
  15. File dir = new File("/sdcard/gif_test/");
  16. File[] files = dir.listFiles(new FilenameFilter() {
  17. @Override
  18. public boolean accept(File dir, String filename) {
  19. return filename.endsWith(".gif");
  20. }
  21. });
  22. Log.d(TAG, "files: " + files + ", length: " + (files == null ? 0 : files.length));
  23. return files != null ? Arrays.asList(files) : new ArrayList<File>();
  24. }
  25. @Override
  26. protected void onPostExecute(List<File> files) {
  27. GifAdapter adapter = new GifAdapter(files);
  28. mListView.setAdapter(adapter);
  29. }
  30. };
  31. mAsyncTask.execute();
  32. }
  33. @Override
  34. public void onScrollStateChanged(AbsListView view, int scrollState) {
  35. int startPos = view.getFirstVisiblePosition();
  36. int lastPos = view.getLastVisiblePosition();
  37. if (scrollState != SCROLL_STATE_IDLE) {
  38. for(int i = 0; i < (lastPos-startPos); i++) {
  39. ((APMGifView)view.getChildAt(i)).pauseAnimation();
  40. }
  41. } else {
  42. for(int i = 0; i < (lastPos-startPos); i++) {
  43. ((APMGifView)view.getChildAt(i)).startAnimation();
  44. }
  45. }
  46. }
  47. @Override
  48. public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
  49. }
  50. class GifAdapter extends BaseAdapter {
  51. private List<File> mFileList;
  52. public GifAdapter(List<File> fileList) {
  53. mFileList = fileList;
  54. }
  55. @Override
  56. public int getCount() {
  57. return mFileList.size();
  58. }
  59. @Override
  60. public String getItem(int position) {
  61. return mFileList.get(position).getAbsolutePath();
  62. }
  63. @Override
  64. public long getItemId(int position) {
  65. return 0;
  66. }
  67. @Override
  68. public View getView(int position, View convertView, ViewGroup parent) {
  69. if (convertView == null) {
  70. convertView = new APMGifView(GifActivity.this);
  71. }
  72. ((APMGifView)convertView).init(getItem(position));
  73. ((APMGifView)convertView).setDefaultDrawable(new ColorDrawable(Color.DKGRAY));
  74. ((APMGifView)convertView).startAnimation();
  75. return convertView;
  76. }
  77. }
  78. }