Android 无法绘制位图,因为它是在画布上下载的
我正在从一个网站下载一幅图像,它将显示在imageview上 我希望图像在下载时显示在imageview上,并且不要等待下载整个图像。我的意思是,如果图像是10000字节,第一个要下载的字节是1024字节,那么图像应该由1024字节构成,并构成下载图像的一部分,并将其绘制在画布上Android 无法绘制位图,因为它是在画布上下载的,android,image,canvas,bitmap,android-imageview,Android,Image,Canvas,Bitmap,Android Imageview,我正在从一个网站下载一幅图像,它将显示在imageview上 我希望图像在下载时显示在imageview上,并且不要等待下载整个图像。我的意思是,如果图像是10000字节,第一个要下载的字节是1024字节,那么图像应该由1024字节构成,并构成下载图像的一部分,并将其绘制在画布上 byte[] buffer =new byte[1024]; int bytesRead = -1; byte[] writtenOnes;
byte[] buffer =new byte[1024];
int bytesRead = -1;
byte[] writtenOnes;
while((bytesRead = inputStream.read(buffer)) != -1){
fileOutputStream.write(buffer, 0, bytesRead);
fileOutputStream.flush();
filebytes = Files.toByteArray(media);
status = (100 * filebytes.length) / contentLength;
publishProgress(status);
}
fileOutputStream.flush();
fileOutputStream.close();
inputStream.close();
if( media.length() == contentLength){
d(" WELL DONE, FILECOMPLETLY DOWNLOADED. SIZE IS "+ contentLength);
}else{
d(" file not completely downloaded. bytes remaining "+(contentLength -media.length()));
}
}
connection.disconnect();
return mediaFile;
}catch(Exception exc){
exc.printStackTrace();
return "";
}
}
protected void onProgressUpdate(Integer... status) {
int state = status[0];
incompleteBitmap =BitmapFactory.decodeByteArray(filebytes, 0, filebytes.length);
d(" status is "+ state);
canvas.drawBitmap(incompleteBitmap,0,0,new Paint(Paint.FILTER_BITMAP_FLAG));
progressBar.setProgress(state);
}
我无法从下载的字节创建位图。在onProgressUpdate()
方法上尝试获取形成的位图时,我得到了一个NullpointerException
问:有什么方法可以实现这一点吗?如果图像在您的域内,我使用支持渐进式JPEG格式的Fresco图像库获得了很好的效果。但是,如果您正在寻找一个完整的普通解决方案,或者已经在使用另一个图像视图库,或者图像和格式超出您的控制范围,则可能不需要这样做:
一切都在我的控制之下,包括图像格式和获取图像的服务器。让我试试你的解决方案,我会告诉你结果。我在通过编程设置SimpleDraweView的宽度和高度时遇到了一个问题。我在
GenericDraweeHierachy
类中没有看到任何方法,当我使用android方法时,就好像它们没有被实现一样<代码>simpledrawee.getLayoutParams().width=350。你遇到过这样的问题吗?