小编Ana*_*tol的帖子

安卓。画布缩放和平移

我创建了自定义视图,您可以在其中触摸和缩放它。大部分工作都是在这篇文章的帮助下创建的

接下来我观察到,如果我想放大图像,它总是放大到左上角。这是我的onDraw()方法:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.save();
    canvas.translate(mPosX, mPosY);
    canvas.scale(mScaleFactor, mScaleFactor);

    // actual drawing

    canvas.getClipBounds(mRect);
    canvas.restore();
}
Run Code Online (Sandbox Code Playgroud)

所以这是正常行为,因为canvas.scale(px, py);我希望从我的视图缩放到中心点(稍后我将采用focalX,focalY坐标,但现在只是到中心)。我决定更换

canvas.scale(mScaleFactor, mScaleFactor);

canvas.scale(mScaleFactor, mScaleFactor, getWidth()/2-mPosX, getHeight()/2-mPosY);

现在它在图像中间完美缩放。但它以某种方式影响我的 mPosX、mPosY 坐标。我附上一张图片以便更好地理解。

左上角相当于mPosX = 0, mPosY=0

左上角相当于mPosX=0,mPosY=0,就可以了。

接下来,如果我缩小,接下来会发生:

在此输入图像描述

现在它决定左上角等于mPosX=0,mPosY=0(左上角)。但按照我的逻辑,它应该类似于(mPosX=100,mPosY=130)或类似的东西。

所以我的问题是我正在从实际的内容视图中滑出。我应该怎么做才能防止这种行为?

android android-custom-view android-canvas

6
推荐指数
2
解决办法
7840
查看次数