无法在画布上下载时绘制位图

时间:2016-01-14 14:07:00

标签: android image canvas bitmap android-imageview

我从网站下载图片,该图片将显示在imageview上。

我希望图片显示在imageview 下载不要等待整个图片下载。我的意思是如果图像是10000字节并且要下载的第一个字节是1024,那么应该从1024字节构建图像并形成下载的图像部分并将其绘制在画布上

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

问:有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

如果图像在您的域中,我使用支持渐进式JPEG格式的Fresco图像库获得了很好的效果。但是,如果您正在寻找完整的香草解决方案或者已经在使用其他图像视图库,或者图像和格式超出您的控制范围,那么这可能是不可取的:

Fresco progressive JPEG documentation