Как расположить все изображения, вращающиеся в центральной точке - Android

Как разместить все пять изображений в центре, вращая белый по часовой стрелке и против часовой стрелки в центральной точке. Я пытался, но я получаю, как это (изображение ниже) введите описание изображения здесь На данный момент он не вращается в центральной точке.

Вот мой код

public class StartRotatingActivity extends AppCompatActivity implements     Animation.AnimationListener {
private Context mContext;
private ImageView timeBackground_1, timeBackground_2, timeBackground_3, timeBackground_4, timeBackground_5;
Animation animationRight, animationLeft;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start);
    if (getSupportActionBar() != null)
        getSupportActionBar().hide();

    mContext = this;
    timeBackground_1 = (ImageView) findViewById(R.id.bgTimer1);
    timeBackground_2 = (ImageView) findViewById(R.id.bgTimer2);
    timeBackground_3 = (ImageView) findViewById(R.id.bgTimer3);
    timeBackground_4 = (ImageView) findViewById(R.id.bgTimer4);
    timeBackground_5 = (ImageView) findViewById(R.id.bgTimer5);

    animationRight = AnimationUtils.loadAnimation(this, R.anim.rotate_right);
    animationRight.setDuration(12000);
    animationLeft = AnimationUtils.loadAnimation(this, R.anim.rotate_left);
    animationLeft.setDuration(12000);

    timeBackground_1.startAnimation(animationRight);
    timeBackground_2.startAnimation(animationLeft);
    timeBackground_3.startAnimation(animationRight);
    timeBackground_4.startAnimation(animationLeft);
    timeBackground_5.startAnimation(animationRight);

}

@Override
public void onAnimationStart(Animation animation) {

}

@Override
public void onAnimationEnd(Animation animation) {

}

@Override
public void onAnimationRepeat(Animation animation) {

}
}

startActivity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:gravity="center"
android:orientation="vertical">

<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center">

    <ImageView
        android:id="@+id/bgTimer1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|center_horizontal"
        app:srcCompat="@mipmap/bg_time_1" />

    <ImageView
        android:id="@+id/bgTimer2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|center_horizontal"
        app:srcCompat="@mipmap/bg_time_2" />

    <ImageView
        android:id="@+id/bgTimer3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|center_horizontal"
        app:srcCompat="@mipmap/bg_time_3" />

    <ImageView
        android:id="@+id/bgTimer4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|center_horizontal"
        app:srcCompat="@mipmap/bg_time_4" />

    <ImageView
        android:id="@+id/bgTimer5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|center_horizontal"
        app:srcCompat="@mipmap/bg_time_5" />
</FrameLayout>
</LinearLayout>

Rorateleft.xml

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:toDegrees="360" />

Rotateright.xml

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:toDegrees="0" />

Спасибо за продвижение.

3 ответа

Решение

Используйте анимацию объекта. Установите анимацию, как показано ниже.

ObjectAnimator one = ObjectAnimator.ofFloat(timeBackground_1 ,
                "rotation", 0f, 360f);
        one.setDuration(5000);
        one.setRepeatCount(-1);
        one.start();

        ObjectAnimator two = ObjectAnimator.ofFloat(timeBackground_2 ,
                "rotation", 360f, 0f);
        two.setDuration(5000);
        two.setRepeatCount(-1);
        two.start();

        ObjectAnimator three = ObjectAnimator.ofFloat(timeBackground_3 ,
                "rotation", 0f, 360f);
        three.setDuration(5000);
        three.setRepeatCount(-1);
        three.start();

        ObjectAnimator four = ObjectAnimator.ofFloat(timeBackground_4 ,
                "rotation", 360f, 0f);
        four.setDuration(5000);
        four.setRepeatCount(-1);
        four.start();

        ObjectAnimator five = ObjectAnimator.ofFloat(timeBackground_5 ,
                "rotation", 0f, 360f);
        five.setDuration(5000);
        five.setRepeatCount(-1);
        five.start();

Проблемы в ваших точках в Rotateleft.xml

android:pivotX="70%"
android:pivotY="30%"

сделать их:

android:pivotX="50%"
android:pivotY="50%"

Вы также можете попробовать это в коде:

Animation a = new RotateAnimation(0.0f, 360.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        a.setRepeatCount(Animation.INFINITE);
        a.setDuration(12000);

О, действительно легко переместить imageView по центру другого (нижнего) вида:

rotate_anim.xml: (обратите внимание на сводные параметры)

<set
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
     <rotate
        android:fromDegrees="0"
        android:toDegrees="90"
        android:pivotX="50%"
        android:pivotY="100%"
        android:duration="1000" />
</set>

И в вашей деятельности:

(Котлин):

val an = AnimationUtils.loadAnimation(this, R.anim.rotate_anim)
an.fillAfter = true
sector.startAnimation(an)

(Джава):

Animation an = AnimationUtils.loadAnimation(this, R.anim.rotate_anim);
an.fillAfter = true
sector.startAnimation(an)
Другие вопросы по тегам