我需要在视图中显示一个非常大的图像(例如8000x8000),允许用户放大和缩小。
我检查了几个用于检测用户触摸的选项,并根据该选项转换图像。例如:
How to use Multi-touch in Android
其他人使用手势/触摸探测器等
问题在于它们都没有处理Bitmap大小和可能的崩溃,因为Bitmap不适合内存。
所以我正在寻找的是如何像Android的Gallery那样实现它。在放大图像时没有丢失质量,当然没有崩溃
有什么想法吗?根据答案的复杂性和质量,完整,有效的答案最多可以达到300分
答案 0 :(得分:2)
尝试仅显示位图的缩放子集并尽可能少地进行解码。我做了类似的事情。这些代码片段对我帮助很大:
要计算所需的所有值(例如比例因子,像素数等),您可以使用inJustDecodeBounds来获取位图的大小而不分配任何内存。:
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, opt);
int width = opt.outWidth;
int height = opt.outHeight;
要仅解码位图的子集,请使用以下命令:
Bitmap.createBitmap(
source,
xCoordinateOfFirstPixel,
yCoordinateOfFirstPixel,
xNumberOfPixels,
yNumberOfPixels
);
创建缩放位图:
Bitmap.createScaledBitmap(
source,
dstWidth,
dstHeight,
filter
);
绘制位图的子集:
Canvas.drawBitmap(
source,
new Rect(
subsetLeft,
subsetTop,
subsetRight,
subsetBottom
),
new Rect(0,0,dstWidth, dstHeight),
paint
);
编辑: 我忘了提到这个用于创建缩放图像的snipplet。为了节省内存,这就是你想要的:
BitmapFactory.Options opt = new BitmapFactory.Options();
options.inSampleSize = 2;
Bitmap scaledBitmap = BitmapFactory.decodeFile(path, opt);
由于inSampleSize必须是一个整数,我使用createScaledBitmap来调整位图。
答案 1 :(得分:1)
http://www.anddev.org/large_image_scrolling_using_low_level_touch_events-t11182.html
可能?
此刻的网站,所以它最终可能与你无关,但我想我应该发布它。
也
“ZOOM CONTROL(Widget)侦听OnTouch事件以处理平移”
最后:
https://github.com/MikeOrtiz/TouchImageView
如果我知道2.0 + ,^^可能正是你所寻找的
失败了,一个webview并加载这样的文件。