Просмотрщик Фото Для Андроид Анимация
Я создал макет с видом изображения и веб-просмотра. Веб-представление имеет видимость по умолчанию gone. Когда действие запускается, оно сначала отображает представление изображения, а когда веб-представление завершает загрузку своего url-адреса, оно помечается как видимое, а imageview помечается как скрытый.
когда imageview отображается, я хотел бы, чтобы он вращался несколько раз только для небольшого добавленного pizazz.
Я никогда не делал анимацию в Android и все сообщения, которые я нашел, когда я спросил в Интернете, не были полезны; таким образом, я вернулся к SO за помощью.
Так если я начну с этого...
final ImageView splash = (ImageView)findViewById(R.id.splash);
Как создать повторяющуюся анимацию поворота и применить ее к ImageView?
еще раз спасибо!
9 ответов:
использовать
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 достаточно. затем создайте что-то вроде этого в мешочки
<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);
я выяснил ,что если вы используете.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);и теперь ваше изображение будет поворачиваться вокруг своего центра.
Проверил Код:
imageView.setImageResource(R.drawable.ic_arrow_up); boolean up = true; if (!up) { up = true; imageView.startAnimation(animate(up)); } else { up = false; imageView.startAnimation(animate(up)); } private Animation animate(boolean up) { Animation anim = AnimationUtils.loadAnimation(this, up ? R.anim.rotate_up : R.anim.rotate_down); anim.setInterpolator(new LinearInterpolator()); // for smooth animation return anim; }drawable / ic_arrow_up.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24.0" android:viewportHeight="24.0"> <path android:fillColor="#3d3d3d" android:pathData="M7.41,15.41L12,10.83l4.59,4.58L18,14l-6,-6 -6,6z"/> </vector>anim / rotate_up.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" android:fillEnabled="true"> <rotate android:duration="200" android:fromDegrees="-180" android:pivotX="50%" android:pivotY="50%" android:toDegrees="0" /> </set>anim / rotate_down.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" android:fillEnabled="true"> <rotate android:duration="200" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="180" /> </set>
не жесткий код границы изображения. Просто используйте:
RotateAnimation anim = new RotateAnimation( fromAngle, toAngle, imageView.getDrawable().getBounds().width()/2, imageView.getDrawable().getBounds().height()/2);
Comments