基本信息
源码名称:android 加载 高清 大图
源码大小:8.23M
文件格式:.zip
开发语言:Java
更新时间:2021-02-06
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
加载、缩放、拖动 高清大图

@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int viewWidth = getWidth();
        int viewHeight = getHeight();
        if (viewWidth == 0) {
            return;
        }
        int drawOffsetX = 0;
        int drawOffsetY = 0;
        int contentWidth = getContentWidth();
        int contentHeight = getContentHeight();
        if (viewWidth > contentWidth) {
            drawOffsetX = (viewWidth - contentWidth) / 2;
        }
        if (viewHeight > contentHeight) {
            drawOffsetY = (viewHeight - contentHeight) / 2;
        }
        if (mFactory == null) {
            if (mDrawable != null) {
                mDrawable.setBounds(drawOffsetX, drawOffsetY, drawOffsetX   contentWidth, drawOffsetY   contentHeight);
                mDrawable.draw(canvas);
            }
        } else {
            int mOffsetX = 0;
            int mOffsetY = 0;
            int left = getScrollX();
            int right = left   viewWidth;
            int top = getScrollY();
            int bottom = top   viewHeight;
            float width = mScale * getWidth();
            float imgWidth = imageBlockImageLoader.getWidth();

            float imageScale = imgWidth / width;

            // 需要显示的图片的实际宽度。
            imageRect.left = (int) Math.ceil((left - mOffsetX) * imageScale);
            imageRect.top = (int) Math.ceil((top - mOffsetY) * imageScale);
            imageRect.right = (int) Math.ceil((right - mOffsetX) * imageScale);
            imageRect.bottom = (int) Math.ceil((bottom - mOffsetY) * imageScale);

            int saveCount = canvas.save();

            //如果是大图就需要继续加载图片块,如果不是大图直接用默认的
            DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
            if (mDrawable == null || !imageBlockImageLoader.hasLoad() || (imageBlockImageLoader.getWidth() * imageBlockImageLoader.getHeight() > (displayMetrics.widthPixels * displayMetrics.heightPixels))) {
                imageBlockImageLoader.loadImageBlocks(drawDatas, imageScale, imageRect, viewWidth, viewHeight);
            }
            if (BlockImageLoader.DEBUG) {
                for (int i = 0; i < drawDatas.size(); i  ) {
                    BlockImageLoader.DrawData data = drawDatas.get(i);
                    Rect drawRect = data.imageRect;
                    drawRect.left = (int) (Math.ceil(drawRect.left / imageScale)   mOffsetX)   drawOffsetX;
                    drawRect.top = (int) (Math.ceil(drawRect.top / imageScale)   mOffsetY)   drawOffsetY;
                    drawRect.right = (int) (Math.ceil(drawRect.right / imageScale)   mOffsetX)   drawOffsetX;
                    drawRect.bottom = (int) (Math.ceil(drawRect.bottom / imageScale)   mOffsetY)   drawOffsetY;
                    if (i == 0) {
                        canvas.drawRect(data.imageRect, paint);
                    } else {
                        drawRect.left  = 3;
                        drawRect.top  = 3;
                        drawRect.bottom -= 3;
                        drawRect.right -= 3;
                        canvas.drawBitmap(data.bitmap, data.srcRect, drawRect, null);
                    }
                }
            } else {
                if (drawDatas.isEmpty()) {
                    if (mDrawable != null) {
                        mDrawable.setBounds(drawOffsetX, drawOffsetY, drawOffsetX   contentWidth, drawOffsetY   contentHeight);
                        mDrawable.draw(canvas);
                    }
                } else {
                    for (BlockImageLoader.DrawData data : drawDatas) {
                        Rect drawRect = data.imageRect;
                        drawRect.left = (int) (Math.ceil(drawRect.left / imageScale)   mOffsetX)   drawOffsetX;
                        drawRect.top = (int) (Math.ceil(drawRect.top / imageScale)   mOffsetY)   drawOffsetY;
                        drawRect.right = (int) (Math.ceil(drawRect.right / imageScale)   mOffsetX)   drawOffsetX;
                        drawRect.bottom = (int) (Math.ceil(drawRect.bottom / imageScale)   mOffsetY)   drawOffsetY;
                        canvas.drawBitmap(data.bitmap, data.srcRect, drawRect, null);
                    }
                }
            }
            canvas.restoreToCount(saveCount);
        }
    }