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)
但是,例如,如何使用矩阵在右侧进行扩展,如下图所示?
您可以尝试关注。这个想法是,如果您只有水平或只有垂直比例,那么您必须为所需轴提供实际比例,为另一个轴提供 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)