как повернуть изображение по окружности круга?

Я новичок в этом, так что не вините меня. Я пытаюсь разработать приложение для Android, которое будет создавать музыку. Я пытаюсь сделать панель, которая вращается над кучей кнопок, отображаемых в виде круга, и когда это происходит, воспроизводить звук, представленный каждой кнопкой. Однако до сих пор мне удалось заставить изображение вращаться вокруг середины экрана, установив координаты x и y, представляющие центр круга, но когда я пытаюсь ввести формулу (x + radius*sin(angle)), (y + радиус * cos (угол)), он просто перемещает изображение, которое я хочу повернуть в этой точке. Итак, в основном я пытаюсь повернуть изображение вокруг круга, определяемого кнопками или координатами, а не фактическим изображением круга. Поэтому мне нужно повернуть изображение или изображение по кругу, а не только по точке.

Я также добавил код, чтобы вы могли посмотреть, что я делаю неправильно.

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);

Любая помощь могла бы быть полезна !!


person Lucian Coanda    schedule 20.01.2013    source источник


Ответы (2)


код выглядит так:

    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;
    }
person Someone Somewhere    schedule 26.05.2015

x^2 + y^2 = r^2

Ссылка: http://www.mathwarehouse.com/geometry/circle/equation-of-a-circle.php

Вы должны анимировать центр вашего объекта вокруг всех (x, y), которые удовлетворяют этому уравнению для выбранного вами значения r (радиус круга).

Я не специалист по графике, так что простите за краткость моего ответа.

person nucc1    schedule 20.01.2013
comment
Я действительно не думаю, что знаю, как это сделать. Я попытался сделать цикл и заставить изображение поворачиваться на 1 градус и перемещать местоположение при каждом изменении цикла (360), но не работал - person Lucian Coanda; 22.01.2013