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;
}
相关推荐
拥小抱1 小时前
Compose 知识点
android
文章永久免费只为良心1 小时前
Web应用安全与防护_第三章_日志文件包含_从一道 CTFshow 题目讲透「日志投毒型 LFI → RCE」:原理、时序陷阱与全变种攻防手册
android·网络安全·渗透测试·漏洞危害·漏洞描述·日志投毒·红队指南
AIsoft_86891 小时前
学术讲座录音如何整理?录音APP可行吗
android·iphone
Patrick在香港4 小时前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
海雅达手持终端PDA5 小时前
工业手持终端的“去手机化”演进:看海雅达如何以“同轴扫摄”终结工程妥协,重塑工业PDA新范式
android·物联网·智能手机·硬件工程·能源·制造·iot
booboosui6 小时前
删掉一个住在本机的 agent:8 处要清,顺序不能反
android
hcgeng7 小时前
Android获取崩溃日志
android
aqi007 小时前
AI编程让鸿蒙开发电子书APP更加快捷
android·华为·harmonyos·鸿蒙·harmony
GY-937 小时前
【Android】Android Studio 中的协程
android