在android中旋转一个圆圈

问题描述 投票:0回答:1

我需要在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()),但这只能解决一个问题。另外,其他圈子需要朝不同的方向和不同的速度前进,因此旋转画布可能无法解决问题。我在这方面还很陌生,所以我们将不胜感激。谢谢。

android android-studio android-animation
1个回答
0
投票

我找到了可以接受的解决方案。选项是使用canvas.rotate(),但对于需要围绕主圆旋转的每个圆,都有单独的Canvas和Paint对象。因此,这是对我有用的代码:

© www.soinside.com 2019 - 2024. All rights reserved.