У меня есть ImageButton с изображением. Я хочу повернуть ЕДИНСТВЕННОЕ изображение.
Не так: вращающаяся кнопка

Вот что у меня есть:

 <ImageButton
    android:id="@+id/imageButton"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_alignBottom="@+id/button"
    android:src="@drawable/up"
    />

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

public void clockwise(View view){
    ImageButton image = (ImageButton)findViewById(R.id.imageButton);
    Animation animation = AnimationUtils.loadAnimation(getApplicationContext(),            R.anim.myanimation);<p>
    image.startAnimation(animation);
}

Должен ли я использовать AnimationDrawable или Matrix или любые другие подходы?

2
Artem Goncharenko 25 Апр 2017 в 00:58

2 ответа

Лучший ответ

Вот ответ, как повернуть единственное изображение. Спасибо @Fondesa, я принял ваше предложение.

1. файл аминирования в res / amin / ic_play_sound_animation.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
  android:shareInterpolator="false">
  <rotate
    android:duration="1000"
    android:fromDegrees="0"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="infinite"
    android:repeatMode="restart"
    android:toDegrees="359"/>
</set>

2. Кусок макета страницы с двумя видами (кнопка и изображение выше):

<FrameLayout
      android:id="@+id/frame"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_column="4"
      android:layout_row="3">
      <Button
        android:id="@+id/id_btn_play_sound"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
      <ImageView
        android:id="@+id/id_iv_play_sound_icon"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:scaleType="fitCenter"
        android:src="@drawable/ic_play_sound_1"/>
    </FrameLayout>

< Сильный > 3 . Java-код в Activity:

    private ImageView playSoundIcon = (ImageView)view. findViewById (R.id.id_iv_play_sound_icon);

    private void runBtnAnimation() {
       playSoundIcon.setImageResource(R.drawable.ic_playing_sound_2);
        Animation rotation = AnimationUtils
                .loadAnimation(getActivity().getApplicationContext(),
                        R.anim.ic_play_sound_animation);
        playSoundIcon.startAnimation(rotation);
    }

    private void stopBtnAnimation() {
        playSoundIcon.clearAnimation();
        playSoundIcon.setImageResource(R.drawable.ic_play_sound_1);
    }

4. вы можете посмотреть анимацию GIF, как это выглядит: окончательная анимация для кнопки

0
Artem Goncharenko 2 Май 2017 в 21:16

У вас есть два варианта:

  1. Отделите ваш Button от вашего изображения с помощью FrameLayout. В этом случае вы можете установить прослушиватель щелчка на Button и применить вращение только к ImageView. Это легче и быстрее выполнить, но это обходной путь, и производительность лучше при втором выборе, потому что у вас нет вложенных макетов:

    <FrameLayout
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignBottom="@+id/button">
    
        <Button
            android:id="@+id/imageButton"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
        <ImageView
            android:id="@+id/imageButtonContent"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </FrameLayout>
    
  2. Используйте AnimationDrawable. Вы можете предоставить список рисования во время анимации. Я серьезно рекомендую это.

0
Giorgio Antonioli 24 Апр 2017 в 22:40
43598383