我想创建一个有图像的画廊。
图库中的图像应该是可缩放和可平移的。我可以收缩缩放图像,但无法设置缩放限制并防止图像从屏幕上被平移。
我使用以下代码缩放图像:
http://code.google.com/p/4chan-image-browser/source/browse/src/se/robertfoss/MultiTouch/TouchImageView.java?spec=svnd3e623ddeb6f9e97d9eba2c7aaa7c4567a3822b5&r=d3e623ddeb6f9e97d9eba2c7aaa7c4567a3822b5
第一种方法:
我使用TouchImageView向Gallery提供图像,这允许我缩小缩放,但是
无法滚动库。也就是说,我无法区分“单个选项卡事件”和“选项卡滚动事件”。
第二种方法:
使用imageview将图像提供给gallery,如果用户单击gallery项中的任何一个,则在touchimageview中显示所选图像,用户可以在touchimageview中缩小图像。但这也阻止了我滚动库视图。以及如何设置所选图像的缩放限制和平移边界?

最佳答案

这为我解决了缩放限制问题。将图像放大/缩小到极限后,它将停止进一步放大。它也很平滑,没有滞后。0.7和2.0是最小和最大缩放级别。

....
} else if (mode == ZOOM) {
    float[] f = new float[9];

    float newDist = spacing(event);
    if (newDist > 10f) {
            matrix.set(savedMatrix);
            float tScale = newDist / dist;
            matrix.postScale(tScale, tScale, mid.x, mid.y);
    }

    matrix.getValues(f);
    float scaleX = f[Matrix.MSCALE_X];
    float scaleY = f[Matrix.MSCALE_Y];

    if(scaleX <= 0.7f) {
            matrix.postScale((0.7f)/scaleX, (0.7f)/scaleY, mid.x, mid.y);
    } else if(scaleX >= 2.5f) {
            matrix.postScale((2.5f)/scaleX, (2.5f)/scaleY, mid.x, mid.y);
    }
}
....

07-28 03:18
查看更多