android - 如何在 Android Canvas 上移动两个圆圈?
问题描述
我只能在onTouchEvent方法中移动一个圆圈
我注意到的另一个问题是,当您触摸 Canvas 上的任何位置时,Circle One 的位置会发生变化
这应该只在触摸/拖动圆圈时发生
看起来 Canvas 只能识别触摸
我怎么解决这个问题 ?
public class Example extends View {
private Paint circleOne, circleTwo;
float xCircleOne, yCircleOne, xCircleTwo, yCircleTwo;
int radiusCircleOne = 100;
int radiusCircleTwo = 50;
public Example(Context context) {
super(context);
init();
}
private void init() {
circleOne = new Paint();
circleTwo = new Paint();
...
}
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
xCircleOne = event.getX();
yCircleOne = event.getY();
invalidate();
break;
}
return true;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// Circles
canvas.drawCircle(xCircleOne, yCircleOne, radiusCircleOne, circleOne);
canvas.drawCircle(xCircleTwo, yCircleTwo, radiusCircleTwo, circleTwo);
}
}
解决方案
int xonTouch,yonTouch,xonMotion,yonMotion;
boolean trackStatus;
int xdistance=xCircleTwo-xCircleOne;
int ydistance=yCircleTwo-YCircleOne;
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN://getInitialCoordinates when when you Touch;
xonTouch=event.getX();
yonTouch=event.geyY();
//TO move only when touching and dragging
//check if these xonTouch and yonTouch are inside the circle by comparing the coordinates of circle if these lie inside cirlce return true to track motion else return false so the ACTION_MOVE is not triggered
i.e if(condition)//condition=xonTouch and yonTouch lie inside circle.
trackStatus=true;
else trackStatus=false;
break;
case MotionEvent.ACTION_MOVE:
//to move circle two use following
xCircleOne = event.getX();
yCircleOne = event.getY();
xCircleTwo= xCircleOne+xdistance;
yCircleTwo = yCircleOne+ydistance;
trackStatus=true;
invalidate();
break;
}
case MotionEvent.ACTION_UP:
trackStatus=false;
break;}
return trackStatus;
}
推荐阅读
- python - 将两个 Pandas DataFrame 组合成一个三维 np.array
- javascript - Angular 在字符串中查找标记并用真实的 html 标记替换
- java - 在服务android中显示自定义警报对话框
- c# - C# xml 序列化结构改变
- javascript - 努力理解这些功能是如何工作的
- odoo - ODOO -12 通知设置
- c# - .NET Core MVC 在 iframe (IronPDF) 中显示 PDF
- azure - Azure Front Door 在重定向中保留自定义 URL
- c - 如何从 C 变量中的 txt 文件中解析表?
- node.js - AES-192 的 IV 长度无效