java - 如何让位图移动到中心?
问题描述
我想Bitmap
自动向我的中心移动canvas
。我尝试了以下代码,但它没有按我的意愿工作 它经常发生位图不直接到达中心 或者,位图可能到达屏幕的两个中心轴之一,然后到中心
canvasWidth = canvas.getWidth();
canvasHeight = canvas.getHeight();
if(mBitmapX < canvasWidth/2){
mBitmapX = mBitmapX + mBitmapSpeed;
}else{
mBitmapX = mBitmapX - mBitmapSpeed;
}
if(mBitmapY < canvasHeight/2){
mBitmapY = mBitmapY + mBitmapSpeed;
}else{
mBitmapY = mBitmapY - mBitmapSpeed;
}
解决方案
这应该使您从任何起始位置向中心点移动一步距离 mBitmapSpeed:
double x = /* canvas.getX() + */ canvas.getWidth() / 2 - mBitmapX;
double y = /* canvas.getY() + */ canvas.getHeight() / 2 - mBitmapY;
double dist = Math.sqrt(x*x + y*y);
double step = Math.min(dist, mBitmapSpeed);
if (dist != 0) {
mBitmapX += x * step / dist;
mBitmapY += y * step / dist;
}
请注意,这假设您的画布坐标从 (0,0) 开始。如果他们不这样做,您需要将等效调用添加到注释掉的位。
推荐阅读
- c++ - 表视图的标题
- c++ - 如何使用 RxCpp 创建 ReplaySubject?
- ios - 按下collectionview单元格时如何通过segue创建和传递数据的提示
- swift - 如何使用苹果的网络框架向所有链接本地节点发送 UDP 消息?
- java - kafka-clients 包中的 AdminClient 线程安全吗?
- python - 如何从 BeautifulSoup 请求中抽象出两个项目
- macos - 从多个目录移动多个文件
- ansible - Jinja2 - for 循环中的全局变量更新
- c++ - 递归地将给定的字符串转换为它所代表的数字
- git - 如何在 SourceTree 中包含丢失的文件?