Анимация Android ImageView

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

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

Я никогда не делал анимаций прежде в Android и всех сообщениях, которые я нашел, когда я попросил, чтобы Интернет не был полезен; таким образом я возвратился к ТАК для справки.

Таким образом, если я запускаю с этого...

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

Как я создаю повторное, поворачивают анимацию и применяют его к ImageView?

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

60
задан Praveen 20 April 2010 в 14:45
поделиться

3 ответа

Вы можете использовать, например, typeid для запроса динамического типа объекта, но я не знаю пути для непосредственного создания экземпляра нового объекта из информации о типе.

Однако, помимо метода клонирования , упомянутого выше, можно использовать фабрику

#include <typeinfo>
#include <iostream>

class Base
{
public:
    virtual void foo() const
    {
        std::cout << "Base object instantiated." << std::endl;
    }
};


class Derived : public Base
{
public:
    virtual void foo() const
    {
        std::cout << "Derived object instantiated." << std::endl;
    }
};


class Factory
{
public:
    static Base* createFrom( const Base* x )
    {
        if ( typeid(*x) == typeid(Base) )
        {
            return new Base;
        }
        else if ( typeid(*x) == typeid(Derived) )
        {
            return new Derived;
        }
        else
        {
            return 0;
        }
    }
};


int main( int argc, char* argv[] )
{
    Base* X = new Derived;
    if ( X != 0 )
    {
        std::cout << "X says: " << std::endl;
        X->foo();
    }

    Base* Y = Factory::createFrom( X );
    if ( Y != 0 )
    {
        std::cout << "Y says: " << std::endl;
        Y->foo();
    }

    return 0;
}

P.S. : Основной частью этого примера кода является метод Factory:: createFrom . (Наверное, это не самый красивый код C++, так как мой C++ немного ржавел. Заводской метод, вероятно, не должен быть статичным, на второй мысли.)

-121--2158587-

Основная часть JVM находится в модуле горячей точки OpenJDK. Однако то, что вам нужно, скорее всего, будет в src.zip.

Модуль горячей точки, отделенный от этих классов,

  • в основном на C++
  • не всегда легко понять. Это улучшилось с годами, и новый кодекс, как правило, лучше, поскольку они больше понимают, что код будет иметь более широкое потребление.
  • часто не то, что вы ищете.

Поэтому, если вы хотите узнать, как работает JVM, лучше всего посмотреть на часто используемые классы. Например, даже такой низкий уровень, как то, как lambdas действительно работать во время выполнения в основном в src.zip мало в JVM.

Большинство исходных файлов для библиотек поставляется с JDK в файле src.zip. Эта функция будет использоваться автоматически в среде IDE. Вам гораздо лучше быть знакомым с классами в этих библиотеках, чем играть с самим JDK.

-121--929057-

Используйте 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);
102
ответ дан 24 November 2019 в 17:29
поделиться
[

] Один способ - разделить изображение на 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> 
] [

]code start[

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

]code stop [

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

]more []here[] [

]
11
ответ дан 24 November 2019 в 17:29
поделиться
[

] Вы также можете просто использовать функцию анимации Rotate. Это запускает определенную анимацию, в течение заранее установленного времени, на 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: Ответ Кристофера дает информацию о том, как зациклить программу должным образом, так что уберите мое плохое предложение по поводу отдельных потоков![

].
24
ответ дан 24 November 2019 в 17:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: