2

Мне нужно сделать изображение с функцией поворота. Поэтому я посмотрел на разработчиков Android site. И использовали их коды. Но почему-то я получаю сообщение об ошибке.ImageView с поворотом в Android

Ошибка: java.lang.ClassCastException: android.graphics.drawable.StateListDrawable cannot be cast to android.graphics.drawable.AnimationDrawable

У меня есть эти коды:

ImageView refresh = (ImageView)findViewById(R.id.refresh_devices_button); 
refresh.setBackgroundResource(R.drawable.spin_animation); // The IDE says that it may produce null pointer exception 
AnimationDrawable frameAnimation = (AnimationDrawable) refresh.getBackground(); 
frameAnimation.start(); 

В spin_animation.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<animation-list android:id="@+id/selected" android:oneshot="false"> 
    <item android:drawable="@drawable/scan_1" android:duration="50" /> 
    <item android:drawable="@drawable/scan_2" android:duration="50" /> 
    <item android:drawable="@drawable/scan_3" android:duration="50" /> 
    <item android:drawable="@drawable/scan_4" android:duration="50" /> 
    <item android:drawable="@drawable/scan_5" android:duration="50" /> 
</animation-list> 
</selector> 

Пожалуйста, помогите мне. С сайта android я получаю коды, но их коды не работают. Возможно, проблема связана с моим файлом spin_animation.xml.

refresh.getBackgroundStateListDrawable думаю.

ответ

0

Я нашел, что сайт андроида в порядке. Проблема была в моем XML-файле. У меня был этот код

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <animation-list android:id="@+id/selected" android:oneshot="false"> 
     <item android:drawable="@drawable/scan_1" android:duration="50" /> 
     <item android:drawable="@drawable/scan_2" android:duration="50" /> 
     <item android:drawable="@drawable/scan_3" android:duration="50" /> 
     <item android:drawable="@drawable/scan_4" android:duration="50" /> 
     <item android:drawable="@drawable/scan_5" android:duration="50" /> 
    </animation-list> 
</selector> 

Вместо того, чтобы код выше, я использовал следующий код. Мне пришлось удалить теги <selector>.

<?xml version="1.0" encoding="utf-8"?> 
<animation-list 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/selected" android:oneshot="false"> 
    <item android:drawable="@drawable/scan_1" android:duration="50" /> 
    <item android:drawable="@drawable/scan_2" android:duration="50" /> 
    <item android:drawable="@drawable/scan_3" android:duration="50" /> 
    <item android:drawable="@drawable/scan_4" android:duration="50" /> 
    <item android:drawable="@drawable/scan_5" android:duration="50" /> 
</animation-list> 
0

Вращение анимации в ImageView

`RotateAnimation anim = new RotateAnimation(0f, 350f, 15f, 15f); 
    anim.setInterpolator(new LinearInterpolator()); 
    anim.setRepeatCount(Animation.INFINITE); 
    anim.setDuration(700); 

    // Start animating the image 
    final ImageView splash = (ImageView) findViewById(R.id.splash); 
    splash.startAnimation(anim); 

    // Later.. stop the animation 
splash.setAnimation(null);` 
+0

Извините, что я отредактировал свой ответ .. – KrishnaJ

0

У меня есть анимация вращения для моей ImageView. Вы можете попробовать с этим кодом: Сначала создайте XML для анимации вращения в каталоге Anim: rotation_animation.xml:

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

После этого в вашем классе Java (активность или фрагмент) добавить:

Animation rotationAnimation = AnimationUtils.loadAnimation(this, R.anim.rotation_animation); 
yourImageView.startAnimation(rotationAnimation); 

Теперь вы готовы. Счастливый codding :)

+0

У меня нет каталога-аниматора. Должен ли я добавить папку под res или в папку приложения напрямую. – gunescelil

+0

Вам нужно создать новую папку, щелкнув правой кнопкой мыши по папке res, создайте новое имя папки it anim. И вы можете разместить в нем анимацию xmls. –

1

Вы можете использовать что-то вроде этого

 ImageView splash = (ImageView) view.findViewById(R.id.imageView); 

     RotateAnimation anim = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
     anim.setInterpolator(new LinearInterpolator()); 
     anim.setRepeatCount(Animation.INFINITE); 
     anim.setDuration(500); 

     // Start animating the image 

     splash.startAnimation(anim); 
0

Использования ниже коды и импорта ниже класса, а также.

import android.graphics.drawable.AnimationDrawable; 



private AnimationDrawable mAnimation; 
private ImageView mAnimLogo; 

mAnimLogo = (ImageView) findViewById(R.id.loading_image); 
mAnimation = (AnimationDrawable) mAnimLogo.getDrawable(); 


mAnimation.start(); 
0

С этой линией:

AnimationDrawable frameAnimation = (AnimationDrawable) refresh.getBackground(); 

вы пытаетесь бросить StateListDrawable к AnimationDrawable, который бросает исключение.

Хороший и простой:

refresh.animate().rotation(360).setDuration(...); 

вращается ваш взгляд на 360 градусов по часовой стрелке ... мс.

Или

вращает вид BY 360 градусов.

Отъезд ViewPropertyAnimator для различных видов анимаций, которые вы можете кодировать в одной строке.

+0

Моя продолжительность неизвестна. Я сканирую что-то, чтобы оно продолжалось до завершения поиска. – gunescelil