Android 记录View绘制坐标抖动问题

需求:

js 复制代码
1 黑色的原图 红色是调用setRotation旋转90度之后的图形
2 要求通过手势操作左下角的箭头区域,来实现旋转后的图形的放大缩小,并且右上角的位置必须是固定的。

实现思路:

js 复制代码
1 手指按下的时候计算右上角在父节点中的位置。
2 计算尺寸改变之后右上角在父节点的位置(只改变view的宽高,getLeft 跟 getTop 是不会改变的)
3 计算两个坐标的偏差,重新设置View的left 跟 top。

计算过程中遇到的问题:

js 复制代码
旋转90度的时候,我们计算右上角在父节点的坐标,一般是这么算的
x = getLeft + (width - height)/2 + height
y = getTop + (height - width)/2

如果直接这么计算你会发现在手势移动的时候,view右上角会抖动。出现这个抖动的原因是(width - height)/2这个计算。因为这里用到的变量都是int类型。(width - height)/2 结果也是int,这就会出现位置丢失的问题。举个例子:

js 复制代码
int a = (5-3)/2 //1
int b = (6-3)/2 //1

其实我们b我们期望的距离是1.5,但是因为都是int的原因导致丢失了0.5,也就是丢失这个0.5导致右上角的坐标跳动。

解决办法:保证width - height 永远是偶数

arduino 复制代码
private void correctionSize(){
    boolean result = isOneEvenOneOdd(width,height);
    if(result){
        width+=1;
    }
}

public boolean isOneEvenOneOdd(int a, int b) {
    return (a + b) % 2 != 0;
}
相关推荐
阿巴斯甜10 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker10 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq952711 小时前
Andorid Google 登录接入文档
android
黄林晴13 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_1 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android