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;
}
相关推荐
余衫马2 小时前
Ubuntu24.04 安卓模拟器安装指南
android·容器·模拟器
诺诺Okami2 小时前
Android Framework-WMS-动画-初步认识
android
用户2018792831672 小时前
Try-Catch-Finally中的Return执行顺序:一个外卖配送的故事
android
wj0718421543 小时前
Android 内存优化 第2篇
android
用户2018792831673 小时前
浅析Hanlder消息队列处理各种消息的流程
android
用户2018792831673 小时前
浅析Hanlder处理延时消息的流程
android
用户093 小时前
Android面试基础篇(一):基础架构与核心组件深度剖析
android·面试·kotlin
wow_DG5 小时前
【MySQL✨】MySQL 入门之旅 · 第十篇:数据库备份与恢复
android·数据库·mysql
00后程序员张5 小时前
iOS 26 系统流畅度深度剖析,Liquid Glass 视效与界面滑动的实际测评
android·macos·ios·小程序·uni-app·cocoa·iphone