如何围绕圆周旋转图像?

时间:2013-01-20 10:12:51

标签: android rotation geometry rotateanimation

我是新手,所以不要怪我。我正在尝试开发一个可以制作音乐的Android应用程序。我正在尝试制作一个旋转一圈按钮的条形图,这些按钮以圆形的形式显示,当它播放每个按钮所代表的声音时。然而到目前为止,我设法通过设置代表圆心的x和y坐标使图像围绕屏幕中间旋转,但是当我尝试放置公式(x +半径* sin(角度))时,(y + radius * cos(angle)),它只是移动我想在那个点旋转的图像。所以基本上我试图围绕由按钮或坐标定义的圆而不是实际的圆形图像旋转图像。所以我需要围绕一个圆圈旋转图像或图像,而不仅仅是一个点。

我已经很好地添加了代码,所以你可以看看我做错了什么。

ImageView bara = (ImageView) findViewById(R.id.floating_image);

layoutParams[9] = new RelativeLayout.LayoutParams

(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

        toop = Math.round(size.x/2);      // + 90*Math.sin(ANGLE)); 
        lefft = Math.round(size.y/2);    // + 90*Math.cos(ANGLE)); 
        top = (int) toop;
        left = (int) lefft;
        layoutParams[9].setMargins(top, left, 0, 0);
        bara.setLayoutParams(layoutParams[9]);
        RotateAnimation rAnim = new RotateAnimation(0.0f, 360.0f, Animation.RELATIVE_TO_SELF,  0 , Animation.RELATIVE_TO_SELF, 0);
        rAnim.setRepeatCount(Animation.INFINITE);
        rAnim.setInterpolator(new LinearInterpolator());
        rAnim.setDuration(8000);
        bara.startAnimation(rAnim);

任何帮助都会非常感激!!

2 个答案:

答案 0 :(得分:0)

x ^ 2 + y ^ 2 = r ^ 2

参考:http://www.mathwarehouse.com/geometry/circle/equation-of-a-circle.php

您应该为所选的r(圆的半径)满足该等式的所有(x,y)围绕对象的中心设置动画。

我不是一个图形人,所以请原谅我的回应。

答案 1 :(得分:0)

代码如下:

    private float mCalcX;//x-coord of object
    private float mCalcY;//y-coord of object
    private double mCenterX;//x-coord of center of circle
    private double mCenterY;//y-coord of center of circle
    private double mRadius;//circle radius
    private double mAngleRadians;//angle of your object to draw in RADs

    // whenever you draw the object, calculate the new X and Y coords
    mCalcX = (float) (mCenterX+(mRadius*Math.cos(mAngleRadians)));
    mCalcY = (float) (mCenterY+(mRadius*Math.sin(mAngleRadians)));

    public void setRadius(double r)
    {
        mRadius = r;
    }

    public void setStartingAngle(double radians)
    {
        mAngleRadians = radians;
    }

    public void setRotationSpeed(double radians)
    {
        mRotationSpeed = radians;
    }

    public void increaseRotationAngle()
    {
        mAngleRadians += mRotationSpeed;
    }

    public void decreaseRotationAngle()
    {
        mAngleRadians -= mRotationSpeed;
    }