Android 利用Canvas实现双指拖动和双指缩放图片(二)-图片拖出边界检测

来源:互联网 发布:php文章管理系统 初学 编辑:程序博客网 时间:2024/06/09 16:39

  以下这篇文章使用的双指拖动和缩放图片,现在要加上边界检测,防止图片拖出屏幕外边。始终使图片的一部分保留在屏幕内。

Android 利用Canvas实现双指拖动和双指缩放图片
http://blog.csdn.net/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);...}
0 0
原创粉丝点击