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;
}
相关推荐
weixin_403810137 小时前
AI智能体写安卓自动化脚本教程:Cursor/Trae+CLI 实战,自然语言生成代码
android·人工智能·自动化·跨境电商·安卓自动化脚本·多账户运营
呆呆小孩9 小时前
零基础学 MySQL(上):从建库建表到增删改查,一篇搭好 SQL 基础
android·sql·mysql
catchadmin9 小时前
NativePHP v4 让 Blade 构建原生 iOS 与 Android 界面
android·ios·ai·php
FfHUCisI10 小时前
Golang 数据库连接池深度调优
android·数据库·golang
古法安卓13 小时前
Android-epoll原理详解
android·java·android studio
字节暗面15 小时前
四款 APP 加固强度测评:让 AI 拆了四个包,结果有点出乎意料
android·逆向工程·加固
网安蟹佬霸15 小时前
蓝队防御实战:SIEM与SOAR构建安全运营中心(万字详解+实战配置)
android·安全·web安全·网络安全·网安
敢敢のwings16 小时前
世界模型与FlashWorld:从“在梦中学习“到秒级3D场景生成
android·学习·3d
Dovis(誓平步青云)17 小时前
牛奶不能减成负数:冰箱库存的筛选、去重与不可变更新
android·java·开发语言
Awna18 小时前
MySQL 存储空间与索引运维实战:从空间排查到在线扩容
android·运维·mysql