如何在 Android 中从 4 边更改视图的大小?

Umu*_*ALI 8 android resize view matrix

是否可以通过拉动视图 4 侧的矩阵来调整大小?我可以从一个点调整到这样的比例。

调整视图大小

上面的例子工作如下:

protected boolean onTouchDown(@NonNull MotionEvent event) {
  oldDistance = (float) Math.sqrt((midPoint.x-event.getX()) * (midPoint.x-event.getX()) + (midPoint.y-event.getY()) * (midPoint.y-event.getY()));
...
}

float newDistance = (float) Math.sqrt((midPoint.x-event.getX()) * (midPoint.x-event.getX()) + (midPoint.y-event.getY()) * (midPoint.y-event.getY()));
moveMatrix.set(downMatrix);
moveMatrix.postScale(newDistance / oldDistance, newDistance / oldDistance, midPoint.x,
        midPoint.y);
handlingSticker.setMatrix(moveMatrix);
Run Code Online (Sandbox Code Playgroud)

但是,例如,如何使用矩阵在右侧进行扩展,如下图所示?

第一的 第二

Anh*_*nun 4

您可以尝试关注。这个想法是,如果您只有水平或只有垂直比例,那么您必须为所需轴提供实际比例,为另一个轴提供 1。检查比例是水平还是垂直有点棘手,您可以检查:

1 第一次触摸位于视图的“垂直”边界附近。滚动是水平的(x 轴)。否则它是垂直的(y 轴)。

2 如果您有可以拖动的按钮(如屏幕截图所示),这会使事情变得更加容易:您只需记住使用哪些按钮启动秤即可。

protected boolean onTouchDown(@NonNull MotionEvent event) {
  oldDistance = (float) Math.sqrt((midPoint.x-event.getX()) * (midPoint.x-event.getX()) + (midPoint.y-event.getY()) * (midPoint.y-event.getY()));
...
}

boolean isHorizonalScale = ... // Check if the drag has been started on the "vertical" side. If no, the scale is vertical.

moveMatrix.set(downMatrix);

if (isHorizonalScale) {
    float newDistance = (float) Math.abs(midPoint.x-event.getX());
    moveMatrix.postScale(newDistance / oldDistance, 1, midPoint.x, midPoint.y);
} else if (isHorizonalScale) {
    float newDistance = (float) Math.abs(midPoint.y-event.getY());
    moveMatrix.postScale(1, newDistance / oldDistance, midPoint.x, midPoint.y);
}
handlingSticker.setMatrix(moveMatrix);
Run Code Online (Sandbox Code Playgroud)