我需要在Android Studio中制作Canvas动画(使用Java),在该工作室中,我需要在屏幕中心显示一个圆圈,并且需要在主中心圆圈周围盘旋一些圆圈(类似于行星绕着太阳旋转)。所以,我的问题是如何制作一个动画来做到这一点-使一个圆圈绕过另一个中心固定的圆圈?通过下面的代码,我试图确定一个圆圈的逻辑,并且我将使用相同/相似的逻辑为其他圆圈设置动画。请分享一些信息,如果您知道我该如何解决。谢谢。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
screenDimensions = getDisplayDimensions();
mainCircleX = screenDimensions[0] / 2;
mainCircleY = screenDimensions[1] / 2;
mainRadius = screenDimensions[0] - (screenDimensions[0] * 0.9f);
circle1X = mainCircleX + mainRadius + (screenDimensions[0] - screenDimensions[0] * 0.95f);
circle1Y = mainCircleY;
bitmap = Bitmap.createBitmap(screenDimensions[0], screenDimensions[1], Bitmap.Config.ARGB_8888);
canvas = new Canvas(bitmap);
paint = new Paint();
imageView = findViewById(R.id.imageView);
imageView.setImageBitmap(bitmap);
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
renderFrame();
}
});
}
}, 200, 400);
}
private void renderFrame() {
paint.setColor(Color.YELLOW);
canvas.drawColor(Color.parseColor("#8D99A0"));
canvas.drawCircle(mainCircleX, mainCircleY, mainRadius, paint);
paint.reset();
paint.setColor(Color.parseColor("#CC4125"));
paint.setStrokeWidth(10f);
paint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(circle1X, circle1Y, 40, paint);
/*Need logic here that will make the circle with circle1X and circle1Y center coordinates, go around the main circle*/
imageView.invalidate();
}
我已经尝试过旋转画布(canvas.rotate()),但这只能解决一个问题。另外,其他圈子需要朝不同的方向和不同的速度前进,因此旋转画布可能无法解决问题。我在这方面还很陌生,所以我们将不胜感激。谢谢。
我找到了可以接受的解决方案。选项是使用canvas.rotate(),但对于需要围绕主圆旋转的每个圆,都有单独的Canvas和Paint对象。因此,这是对我有用的代码: