如何将Rect应用于View边界? 背景我尝试了什么?其他类似的未解决问题:

问题描述

我有一个Rect对象。

Rect (left = 50,top = 50,right = 150,bottom = 150)

我想将此矩形应用于这样的视图

view (x = 50,y = 50,width = 100,height = 100)

背景

我在FrameLayout中有一个TextView。 FrameLayout使用onDraw()在此TextView周围绘制一个矩形。此外,FrameLayout上还设置了触摸监听器。每当接收到触摸事件时,我都会移动TextView。触摸事件,并使用invalidate()更新绘制的矩形。

现在,除此之外,我在此绘制的矩形上也有四个角拖动点(以调整基础TextView的大小)。

  1. 右下角:更改宽度和高度
  2. 右上角:更改宽度;同时更改Y和高度
  3. 左下角:更改高度;同时更改X和宽度
  4. 左上角:同时更改X和宽度;同时更改Y和高度

现在,通过更新Rect对象来绘制这些更改很容易。我可以将位移值应用于rect,并使FrameLayout无效以查看新的Rectangle。 但是,如何将这些矩形更改应用于绘制矩形下方的TextView?


我尝试了什么?

fun resizeByBottomLeftCorner(displacementX: Float,displacementY: Float) {

    val view = getTargetView()

    val layoutParams = view.layoutParams
    view.x = view.x + displacementX
    layoutParams.width = (view.width - displacementX).roundToInt()
    layoutParams.height = (view.height + displacementY).roundToInt()
    view.layoutParams = layoutParams
}

fun resizeByBottomRightCorner(displacementX: Float,displacementY: Float) {

    val view = getTargetView()

    val layoutParams = view.layoutParams
    layoutParams.width = (view.width + displacementX).roundToInt()
    layoutParams.height = (view.height + displacementY).roundToInt()
    view.layoutParams = layoutParams
}

fun resizeByTopRightCorner(displacementX: Float,displacementY: Float) {

    val view = getTargetView()

    val layoutParams = view.layoutParams
    layoutParams.width = (view.width + displacementX).roundToInt()
    view.y = view.y + displacementY
    layoutParams.height = (view.height - displacementY).roundToInt()
    view.layoutParams = layoutParams
}

fun resizeByTopLeftCorner(displacementX: Float,displacementY: Float) {

    val view = getTargetView()

    val layoutParams = view.layoutParams
    view.x = view.x + displacementX
    layoutParams.width = (view.width - displacementX).roundToInt()
    view.y = view.y + displacementY
    layoutParams.height = (view.height - displacementY).roundToInt()
    view.layoutParams = layoutParams
}

这正常工作。但是,如果将TextView旋转了某个值,则会开始产生与我预期相反的错误视觉效果。

P.S。我也尝试直接更改view.leftview.rightview.bottomview.top。但是,它们会被layout()覆盖。此外,View的文档中禁止使用它们。

当前用户界面:

visual of my program emulator

我想实现显示的in this recorded video


其他类似的未解决问题:

  1. How to create View from Rect

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...