首页 > 解决方案 > 有效地调整位图 onDraw

问题描述

我正在尝试扩展一些显示图像并允许使用手势缩放它的视图。

我想将其转换为某种地图,只需在其上添加小图标。为此,我需要在每次绘制时调整图标位图的大小(或者可能是错误的)。

目前我这样做:

private void resizeBitmaps() {
        final float density = getResources().getDisplayMetrics().densityDpi;
        for (Bitmap b : activeBitmaps) {
            final float w = (density / 420f) * b.getWidth() * getScale();
            final float h = (density / 420f) * b.getHeight() * getScale();
            final Bitmap result = Bitmap.createScaledBitmap(b, (int) w, (int) h, true);
            if (result != null) {
                resizedBitmaps.put(b, result);
            }
        }
        invalidate();
}

@Override
protected void onDraw(Canvas canvas) {
    ...
    resizeBitmaps();

    for (MapIcon i : activeIconList) {
        final Bitmap b = resizedBitmaps.get(i.getResource());
        // Center bitmaps;
        if (b != null) {
            final PointF p = new PointF();
            sourceToViewCoord(i.getLocation(), p);
            final float vX = p.x - b.getWidth() / 2;
            final float vY = p.y - b.getHeight() / 2;
            canvas.drawBitmap(b, vX, vY, paint);
        }
    }
}

我当然知道这是一个糟糕的解决方案。当它缩放太多时,它开始滞后。我试图在几个线程中做同样的事情,但又遇到了另一个问题。

请帮我解决。

标签: androidandroid-viewandroid-bitmap

解决方案


推荐阅读