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;
}
相关推荐
Doro再努力15 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
Daniel李华16 小时前
echarts使用案例
android·javascript·echarts
做人不要太理性17 小时前
CANN Runtime 运行时组件深度解析:任务调度机制、存储管理策略与维测体系构建逻辑
android·运维·魔珐星云
我命由我1234517 小时前
Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响
android·java·开发语言·java-ee·android studio·android-studio·android runtime
朗迹 - 张伟18 小时前
Tauri2 导出 Android 详细教程
android
lpruoyu18 小时前
【Android第一行代码学习笔记】Android架构_四大组件_权限_持久化_通知_异步_服务
android·笔记·学习
独自破碎E19 小时前
【BISHI15】小红的夹吃棋
android·java·开发语言
李堇1 天前
android滚动列表VerticalRollingTextView
android·java
lxysbly1 天前
n64模拟器安卓版带金手指2026
android
游戏开发爱好者81 天前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview