Android中的多点触控手势和图像

时间:2012-05-18 12:29:36

标签: java android image gallery

我需要在视图中显示一个非常大的图像(例如8000x8000),允许用户放大和缩小。

我检查了几个用于检测用户触摸的选项,并根据该选项转换图像。例如:

How to use Multi-touch in Android

其他人使用手势/触摸探测器等

问题在于它们都没有处理Bitmap大小和可能的崩溃,因为Bitmap不适合内存。

所以我正在寻找的是如何像Android的Gallery那样实现它。在放大图像时没有丢失质量,当然没有崩溃

有什么想法吗?根据答案的复杂性和质量,完整,有效的答案最多可以达到300分

2 个答案:

答案 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并加载这样的文件。