我想创建一个带图像的画廊.图库中的图像应该是可缩放的和可以整理的.我能够捏合缩放图像但无法设置缩放限制并防止图像从屏幕上平移.我使用以下代码来缩放图像:http: //code.google.com/p/4chan-image-browser/source/browse/src/se/robertfoss/MultiTouch/TouchImageView.java?specs = svnd3e623ddeb6f9e97d9eba2c7aaa7c4567a3822b5&r = d3e623ddeb6f9e97d9eba2c7aaa7c4567a3822b5
第一种方法:我使用TouchImageView向图库提供图像,这允许我捏缩放但不能滚动图库.即我无法区分"单一标签事件"和"标签滚动事件".
第二种方法:使用ImageView将图像提供给图库,如果用户点击任何图库项目,则在TouchImageView中显示所选图像,用户可以在其中捏合图像.但这也阻止我滚动图库视图.还有如何在所选图像上设置缩放限制和平移界限?
小智 20
这为我解决了缩放限制问题.在图像放大/缩小到极限后,它就会停止前进.它也很光滑,没有滞后.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);
}
}
....
Run Code Online (Sandbox Code Playgroud)
您可以通过将这些行添加到 ACTION_MOVE, mode == ZOOM 来设置缩放限制:
float[] f = new float[9];
matrix.getValues(f);
float scaleX = f[Matrix.MSCALE_X];
float scaleY = f[Matrix.MSCALE_Y];
if (scaleX > MAX_SCALE || scaleY > MAX_SCALE) return true;
Run Code Online (Sandbox Code Playgroud)
同样,向 ACTION_MOVE, mode == DRAG 添加线条,考虑图像的原始位置、翻译后的长度,然后将它们与边界进行比较。
| 归档时间: |
|
| 查看次数: |
13400 次 |
| 最近记录: |