你把他的代码敲一边 再结合我提的那2个问题 解决哪个了?

你把他的代码敲一边 再结合我提的那2个问题 解决哪个了?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
irista23 2019-03-12 16:40:28

1、http://class.imooc.com/course/qadetail/98419

上述链接问题是图片显示大小相同没有正常显示gif原尺寸,导致这个错误的原因是你在子线程中设置view导致,你可以利用handler在UI主线程中去设置view,两张gif都可以正常显示原尺寸了。

ps:因为你是贴的代码,不是拷贝上去的,老师一行行在ide中敲的代码并且按照你的实现思路帮你调试成功后发送给你参考的。

2、http://class.imooc.com/course/qadetail/98307

上述链接的问题是无法正常获取gif的宽高,你是否因为问题1中现象导致你想改变gif的宽高,如果你使用问答id98419中老师帮你修改后的代码,是否就不需要手动设置宽高了呢?如果你还是想设置可以在自定义GifView类中添加如下代码:

public int getGifWidth() {
   return mMovie.width();
}

那么在activity中可以直接获取到gif的宽高,

http://img1.sycdn.imooc.com//climg/5c876f2b0001af2805330165.jpg

这个方法我在问题2的回答中也有提到

http://img1.sycdn.imooc.com//climg/5c876fbd0001255d09000282.jpg

你可以先参考我之前的代码修改一下(因为发给你的代码我已经验证过显示正常),如果还是没有完全解决你的问题,你还可以继续提问,老师会帮你直到问题全部解决~~

  • 提问者 qq_没在道边上_0 #1
    我只是用线程去模拟一个请求,那我们看看那源码 new GifDownload("https://cdn.duitang.com/uploads/item/201411/16/20141116232126_yXFLS.gif", new GifDownload.DownloadListener() { @Override public void onFinish(File file) { if (file.exists()) { gifView.setFile(file);//这里是子线程中设置view吗? } } }).start();
    2019-03-12 17:06:46
  • irista23 回复 提问者 qq_没在道边上_0 #2
    老师用的是接口回调是在主线程里,new GifDownload.DownloadListener(){}时并非就直接执行了里边的方法,而只是简单的传递了DownloadListener对象,当执行到mListener.onFinish(file);才会回去调用实现的接口方法onFinish(),而这时我们的方法里的参数file也就有值了,我们就可以在另一个类(主线程)里获得该值并处理了
    2019-03-12 17:34:45
  • 提问者 qq_没在道边上_0 回复 irista23 #3
    你看我给你发的log 你还确定接口回调是在主线程?
    2019-03-13 08:38:45
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Android数据通信开发与应用2018版
  • 参与学习           人
  • 提交作业       147    份
  • 解答问题       687    个

本专题介绍了Android开发核心组件:广播、服务及全局应用。教会你如何使用AIDL、Thread、Socket、蓝牙解决进程线程间通信问题。利用Glide等实现异步加载及NDK原生代码开发。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师