android获取gif动图的大小,【Android】使用android-gif-drawable包加载GIF动图

【导包】

首先需要导入android-gif-drawable包,请参考:【android】实用教程:导入android-gif-drawable包,不用在github下载(android studio 3.1.2)

【使用】

一、在layout中添加gifimageview控件,该控件既可以加载gif动态图,也可以加载jpg、png静态图。不需要设置src属性。

2018050509114498.png

二、在java文件中,给gifimageview设置src属性,加载gif动态图。

1、获取gifimageview控件。

gifimageview gifimageview = findviewbyid(r.id.image);

2、实例化gifdrawable对象,共有11种方法。

(1)resouces文件

/**

* creates drawable from resource.

*

* @param res resources to read from

* @param id resource id (raw or drawable)

* @throws notfoundexception if the given id does not exist.

* @throws ioexception when opening failed

* @throws nullpointerexception if res is null

*/

public gifdrawable(@nonnull resources res, @rawres @drawableres int id) throws notfoundexception, ioexception {

this(res.openrawresourcefd(id));

final float densityscale = gifviewutils.getdensityscale(res, id);

mscaledheight = (int) (mnativeinfohandle.getheight() * densityscale);

mscaledwidth = (int) (mnativeinfohandle.getwidth() * densityscale);

}

示例:

// resources file

gifdrawable giffromassets = new gifdrawable(getresources(), r.mipmap.timg);

(2)assets文件

源码:

/**

* creates drawable from asset.

*

* @param assets assetmanager to read from

* @param assetname name of the asset

* @throws ioexception when opening failed

* @throws nullpointerexception if assets or assetname is null

*/

public gifdrawable(@nonnull assetmanager assets, @nonnull string assetname) throws ioexception {

this(assets.openfd(assetname));

}

示例:

// assets file

gifdrawable giffromassets = new gifdrawable(getassets(), "timg.gif");

(3)文件路径

源码:

/**

* constructs drawable from given file path.

* only metadata is read, no graphic data is decoded here.

* in practice can be called from main thread. however it will violate

* {@link strictmode} policy if disk reads detection is enabled.

*

* @param filepath path to the gif file

* @throws ioexception when opening failed

* @throws nullpointerexception if filepath is null

*/

public gifdrawable(@nonnull string filepath) throws ioexception {

this(new gifinfohandle(filepath), null, null, true);

}

示例:

// path to the gif file

gifdrawable giffrompath = new gifdrawable("/path/timg.gif");

(4)file文件

源码:

/**

* equivalent to {@code} gifdrawable(file.getpath())}

*

* @param file the gif file

* @throws ioexception when opening failed

* @throws nullpointerexception if file is null

*/

public gifdrawable(@nonnull file file) throws ioexception {

this(file.getpath());

}

示例:

// the gif file

file giffile = new file(getfilesdir(), "timg.gif");

gifdrawable giffromfile = new gifdrawable(giffile);

(5)输入流stream to read from

源码:

/**

* creates drawable from inputstream.

* inputstream must support marking, illegalargumentexception will be thrown otherwise.

*

* @param stream stream to read from

* @throws ioexception when opening failed

* @throws illegalargumentexception if stream does not support marking

* @throws nullpointerexception if stream is null

*/

public gifdrawable(@nonnull inputstream stream) throws ioexception {

this(new gifinfohandle(stream), null, null, true);

}

(6)assetfiledescriptor

源码:

/**

* creates drawable from assetfiledescriptor.

* convenience wrapper for {@link gifdrawable#gifdrawable(filedescriptor)}

*

* @param afd source

* @throws nullpointerexception if afd is null

* @throws ioexception when opening failed

*/

public gifdrawable(@nonnull assetfiledescriptor afd) throws ioexception {

this(new gifinfohandle(afd), null, null, true);

}

示例:

// creates drawable from assetfiledescriptor

assetfiledescriptor assetfiledescriptor = getassets().openfd("timg.gif");

gifdrawable giffromafd = new gifdrawable(assetfiledescriptor);

(7)filedescriptor

源码:

/**

* creates drawable from filedescriptor

*

* @param fd source

* @throws ioexception when opening failed

* @throws nullpointerexception if fd is null

*/

public gifdrawable(@nonnull filedescriptor fd) throws ioexception {

this(new gifinfohandle(fd), null, null, true);

}

示例:

// creates drawable from filedescriptor

filedescriptor filedescriptor = new randomaccessfile("/path/timg.gif", "r").getfd();

gifdrawable giffromfd = new gifdrawable(filedescriptor);

(8)raw gif bytes

源码:

* creates drawable from byte array.

* it can be larger than size of the gif data. bytes beyond gif terminator are not accessed.

*

* @param bytes raw gif bytes

* @throws ioexception if bytes does not contain valid gif data

* @throws nullpointerexception if bytes are null

*/

public gifdrawable(@nonnull byte[] bytes) throws ioexception {

this(new gifinfohandle(bytes), null, null, true);

}

(9)bytebuffer

源码:

/**

* creates drawable from {@link bytebuffer}. only direct buffers are supported.

* buffer can be larger than size of the gif data. bytes beyond gif terminator are not accessed.

*

* @param buffer buffer containing gif data

* @throws ioexception if buffer does not contain valid gif data or is indirect

* @throws nullpointerexception if buffer is null

*/

public gifdrawable(@nonnull bytebuffer buffer) throws ioexception {

this(new gifinfohandle(buffer), null, null, true);

}

(10)contentresolver

源码:

/**

* creates drawable from {@link android.net.uri} which is resolved using {@code resolver}.

* {@link android.content.contentresolver#openassetfiledescriptor(android.net.uri, string)}

* is used to open an uri.

*

* @param uri gif uri, cannot be null.

* @param resolver resolver used to query {@code uri}, can be null for file:// scheme uris

* @throws ioexception if resolution fails or destination is not a gif.

*/

public gifdrawable(@nullable contentresolver resolver, @nonnull uri uri) throws ioexception {

this(gifinfohandle.openuri(resolver, uri), null, null, true);

}

(11)inputsource

源码:

/**

* creates drawable from {@link inputsource}.

*

* @param inputsource the {@link inputsource} concrete subclass used to construct {@link gifdrawable}.

* @param olddrawable the old drawable that will be reused to save the memory. can be null.

* @param executor the executor for rendering tasks. can be null.

* @param isrenderingtriggeredondraw true if rendering of the next frame is scheduled after drawing current one, false otherwise.

* @param options options controlling various gif parameters.

* @throws ioexception if input source is invalid.

*/

protected gifdrawable(@nonnull inputsource inputsource,

@nullable gifdrawable olddrawable,

@nullable scheduledthreadpoolexecutor executor,

boolean isrenderingtriggeredondraw,

@nonnull gifoptions options) throws ioexception {

this(inputsource.createhandlewith(options), olddrawable, executor, isrenderingtriggeredondraw);

}

3、设置gifimageview控件的src。

gifimageview.setimagedrawable(gifdrawable);

【注意】

gifimageview控件可以加载静态图,步骤如下:

drawable drawable = getdrawable(r.mipmap.ic_launcher);

gifimageview.setimagedrawable(drawable);

gifdrawable类的对象读取静态图可能会报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值