有效地调整onDraw上的位图大小

时间:2018-08-20 13:12:20

标签: android android-view android-bitmap

我正在尝试扩展一些View来显示图像并允许通过手势缩放它。

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

目前我是这样的:

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);
        }
    }
}

我当然知道这是一个不好的解决方案。当缩放比例太大时,它开始滞后。我试图在多个线程中执行相同的操作,但是又遇到了另一个问题。

请帮我修复。

0 个答案:

没有答案