android - 有效地调整位图 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);
}
}
}
我当然知道这是一个糟糕的解决方案。当它缩放太多时,它开始滞后。我试图在几个线程中做同样的事情,但又遇到了另一个问题。
请帮我解决。
解决方案
推荐阅读
- javascript - 获取未捕获的错误:Reference.set 失败:尝试将数据保存到 Firebase 存储时,第一个参数在属性中包含未定义
- html - 位置:粘性;忽略 z-index / Bootstrap 3 菜单折叠在粘性元素下方
- python - 我将如何在 Python 中运行命令行?
- python - 使用 pyyaml/ruamel.yaml 有条件地转储属性
- sublimetext3 - 关闭 Sublime Text Emmet 包中的文本下划线
- python - 为什么我在使用 pygame 的 key.get_pressed 功能时不能在屏幕上输入文本?
- if-statement - 是否可以创建一个公式,根据查找列表检查行中的某些单元格并返回真/假值?
- sql - 基于日期列的列的返回值,取最接近 xx:00 和 xx:30 的值
- python-3.x - 如何在python中读取许多具有特定格式的文件
- javascript - 图像在悬停之前无法完全加载