以下这篇文章使用的双指拖动和缩放图片,现在要加上边界检测,防止图片拖出屏幕外边。始终使图片的一部分保留在屏幕内。
Android 利用Canvas实现双指拖动和双指缩放图片
http://blog.youkuaiyun.com/wb175208/article/details/53510427
/**
* 移动时,防止图片移出屏幕
* 备注:图片的双指拖动是通过移动Bitmap在Canvas上的位置来实现的
* 图片的缩放是通过Canvas的缩放来实现Canvas上面的图片的一起缩放。
* 也就是说图片在实际Canvas的显示的比例是按照1:1放置的,看到的缩放效果是通过Canvas缩放从而带动图片的缩放效果
* 图片向左移动时,留在屏幕中的范围是图片的1/5
* 图片向右移动时,留在屏幕中的范围是屏幕的1/5
*/
private float judgePositionX(float x, float sc) {
float resX = x;
if (x < 0 && ((mBitmapWidth + x) <= mBitmapWidth / 5)) {
resX = -4 * mBitmapWidth / 5;
mTransX = resX * sc - mCenterLeft;
} else if (x * sc >= (4 * mViewWidth / 5)) {
resX = (4 * mViewWidth / 5) / sc;
mTransX = resX * sc - mCenterLeft;
} else {
resX = x;
}
return resX;
}
private float judgePositionY(float y, float sc) {
float resY = y;
if (y < 0 && ((mBitmapHeight + y) <= mBitmapHeight / 5)) {
resY = -4 * mBitmapHeight / 5;
mTransY = resY * sc - mCenterTop;
} else if (y * sc >= 4 * mViewHeight / 5) {
resY = (4 * mViewHeight / 5) / sc;
mTransY = resY * sc - mCenterTop;
} else {
resY = y;
}
return resY;
}
使用方法:
@Override
protected void onDraw(Canvas canvas) {
...
canvas.scale(scale, scale);
x = judgePositionX(x, scale);
y = judgePositionY(y, scale);
...
}