Intereting Posts
Android Runtime.getRuntime (). Exec () для навигации по каталогам Запретить запуск приложения Android Всегда запускайте proguard перед Android dex'ing в Eclipse Добавить и удалить вид из макета Пользовательский календарь и адаптер календаря Android-эмулятор не имеет оконной рамы ProGuard и Gson на Android (ClassCastException) С помощью jsoup с закрывающей силой proguard close Панель инструментов Android не вызывается onOptionsItemSelected From Fragments On Backstack Английский код языка США изменился? Google Speech Api v2 не возвращает правильный результат Предупреждения Ваш Apk использует разрешения, требующие политики конфиденциальности: (android.permission.READ_PHONE_STATE) Perfect unique_id для устройства, кроме IMEI, Android_ID, WLAN Mac и Bluetooth-адреса «Почему Apache Harmony» или «Как использовать Java 8 на Android» Javascript: Любые способы обхода Chrome для Android, чтобы отключить touchmove и touchhend прослушиватели событий, кроме использования event.preventDefault ()? Android 6.0 RuntimeException: не удается подключиться к службе камеры

Android ImageView Animation

Я создал макет с изображением и веб-представлением. Веб-представление настроено на видимость по умолчанию. Когда действие срабатывает, оно сначала отображает представление изображения, и когда веб-представление завершает загрузку своего URL-адреса, оно отмечает себя как видимое, а изображение просматривается как скрытое.

Когда изображение будет показано, я бы хотел, чтобы он вращался несколько раз для небольшого добавления pizazz.

Я никогда не делал анимацию раньше в Android, и все сообщения, которые я нашел, когда я спрашивал в Интернете, не помогли; Таким образом, я вернулся к SO за помощью.

Поэтому, если я начну с этого …

final ImageView splash = (ImageView)findViewById(R.id.splash); 

Как создать повторяющуюся анимацию вращения и применить ее к ImageView?

Еще раз спасибо!

Solutions Collecting From Web of "Android ImageView Animation"

Используйте RotateAnimation , установив точку поворота в центр вашего изображения.

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

Как повернуть изображение вокруг его центра:

 ImageView view = ... //Initialize ImageView via FindViewById or programatically RotateAnimation anim = new RotateAnimation(0.0f, 360.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); //Setup anim with desired properties anim.setInterpolator(new LinearInterpolator()); anim.setRepeatCount(Animation.INFINITE); //Repeat animation indefinitely anim.setDuration(700); //Put desired duration per anim cycle here, in milliseconds //Start animation view.startAnimation(anim); //Later on, use view.setAnimation(null) to stop it. 

Это заставит изображение вращаться вокруг его центра (0,5 или 50% от его ширины / высоты). Я публикую это для будущих читателей, которые попадают сюда из Google, как и у меня, и которые хотят повернуть изображение вокруг своего центра без определения упомянутого центра в абсолютных пикселях.

Вы также можете просто использовать функцию «Поворот анимации». Для ImageView выполняется определенная анимация за определенное время.

 Animation rotate = AnimationUtils.loadAnimation([context], R.anim.rotate_picture); splash.startAnimation(rotate); 

Затем создайте XML-файл анимации в вашем res / anim с именем rotate_picture с содержимым:

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

Теперь, к сожалению, это будет работать только один раз. Вам понадобится петля где-нибудь, чтобы повторить анимацию, пока она ждет. Я немного экспериментировал и запустил свою программу в бесконечных циклах, поэтому я не уверен в этом. EDIT: ответ Кристофера дает информацию о том, как сделать его правильно, поэтому, удалив мое плохое предложение об отдельных потоках!

Один из способов – разделить изображение на N, поворачивая его немного каждый раз. Я бы сказал, 5 достаточно. Затем создайте что-то подобное в drawable

 <animation-list android:id="@+id/handimation" android:oneshot="false" xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/progress1" android:duration="150" /> <item android:drawable="@drawable/progress2" android:duration="150" /> <item android:drawable="@drawable/progress3" android:duration="150" /> </animation-list> 

Начало кода

 progress.setVisibility(View.VISIBLE); AnimationDrawable frameAnimation = (AnimationDrawable)progress.getDrawable(); frameAnimation.setCallback(progress); frameAnimation.setVisible(true, true); 

Остановка кода

 AnimationDrawable frameAnimation = (AnimationDrawable)progress.getDrawable(); frameAnimation.stop(); frameAnimation.setCallback(null); frameAnimation = null; progress.setVisibility(View.GONE); 

Больше здесь

 imgDics = (ImageView) v.findViewById(R.id.img_player_tab2_dics); imgDics.setOnClickListener(onPlayer2Click); 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(4000); // Start animating the image imgDics.startAnimation(anim); 

Внутри элемента поставлен:

 android:repeatCount="infinite" 

Я выяснил, что если вы используете .getWidth / 2 и т. Д., Что он не будет работать, вам нужно будет получить количество пикселей, которые есть на изображении, и разделить его на 2 самостоятельно, а затем просто введите номер для Последние 2 аргумента.

Так что скажите, что ваше изображение было 120 пикселей на 120 пикселей, ур x и y равнялись бы 60 пикселям. Поэтому в вашем коде вы правы:

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

И теперь ваше изображение будет поворачиваться вокруг его центра.

Не ограничивайте границы изображения. Просто используйте:

 RotateAnimation anim = new RotateAnimation( fromAngle, toAngle, imageView.getDrawable().getBounds().width()/2, imageView.getDrawable().getBounds().height()/2);