安卓开发,关于动态图显示及缩放

最开始做的时候,百度了一下

发现了有一个叫做gifView的第三方包,开始用上去还不错,后来发现不能释放资源,源码也并没有怎么完善,加载过程中若进行了第二次加载就会报空指针。

通过重新new对象可以解决问题,但这样多次操作会造成内存溢出(源码对外暴露的方法中,并没有释放资源这个方法)。


若只是做简单的显示,可以直接使用这个第三方包。

具体操作请自行百度。

------------------------------------------请叫我分割线-------------------------------------------------

使用webView可以直接显示动态图。

用web.loadDataWithBaseURL(null, str_html, "text/html","utf-8", null);

这里用html代码来加载sdcard或者网络上的图片

备注:为什么不直接用load方法而是用loadDataWithBaseURL这个方法,原因是我在用的时候,load读不出图,具体为什么不知道= =。。。。。



网络图片不多说,直接放url地址即可,

本地sdcard图片,格式为:file:///sdcardRoot/filePath

具体例子:str_html = "<html><title>图片显示</title></head><body><table style=\"width:100%; height:auto;\" ><tr><td valign=\"middle\" width=\"100%\" height=\"auto\"> <img src=\"file:///"+ list.get(current_index)+ "\" width=\"100%\" height=\"auto\"/></td></tr></table></body></html>";

这里说明一下,之所以使用table,是因为后面要做放大和缩小

这里实现原理为:若宽大于高,则用宽填充,高为自适应。反之则用高填充,宽自适应。这个时候改变webView的大小,看上去就像改变了动态图的大小,因为里面的图片 始终是按照比例来填充。


具体显示:

基于保持图片宽高比(失去宽高比将导致拉伸,让图片变得模糊),所以用bitmap先读取图片的原图宽高

int width = bitmap.getWidth();

int height  = bitmap.getHeight();

判断图片的宽大还是高大,若宽大于高,这用宽填充,高位自适应。反之则用高填充,宽自适应(交换html代码中 100%和auto的位置即可)。

缩放:

在使用iwebVew的时候,直接设置具体宽高,可以为原图宽高,也可以为某一固定值,或者屏幕百分比

备注:获取屏幕的宽高为:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int dis_width = metrics.widthPixels;
int dis_height = metrics.heightPixels;

动态设置宽高:例如:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width,height);
web.setLayoutParams(params);

自己设置缩放比率,比如我这边设置的是放大,为1.25,缩小为0.8

所以我这边当放大时,用webView的宽高乘以1.25(因为webView的宽高是直接设定的,所以知道它们的具体值)

缩小也一样,用iwebVew的宽高乘以0.8


这样,就可以实现动态图的缩放了

至于动态图的旋转,我应该是没见过有这个功能。。。。所以没考虑


如果涉及到切换显示,设置好路径,让上面的代码重新运行一遍即可。

注意:如果存在图片缓存变量,每次切换显示的时候重置。



有任何想法可以给我留言,期待一起进步,




猜你喜欢

转载自blog.csdn.net/qq_26559913/article/details/50843673
今日推荐