Podría alguien decirme cómo han conseguido ‘RotateDrawable’ a trabajar, ya sea por código o XML, o ambos? La documentación sobre la animación de los Dibujables es bastante pobre y la animación sólo parece funcionar para las imágenes. Quiero ser capaz de animar a todos los dibujables. Cuando traté de hacer una RotateDrawble de XML es sólo produce una excepción. ¿Cuál es la función correcta para encontrar un RotateDrawable de XML?

Muchas gracias

Kerubu

no entiendo la pregunta. ¿quieres tener una animación, o simplemente girar la imagen dentro? para la rotación, echa un vistazo a este post: stackoverflow.com/a/21376008/878126

OriginalEl autor Kerry | 2011-05-03

7 Comentarios

  1. 8

    Que han de animar el «nivel» de la propiedad, donde 0 es el valor de inicio y 10000 es el valor final.

    El ejemplo de abajo anima desde el inicio hasta el final, puede invertir la animación fácilmente con este método.

    final RotateDrawable rotateDrawable = ...
    ObjectAnimator.ofInt(rotateDrawable, "level", 0, 10000).start();
    Puede por favor compartir cómo descubriste «nivel» para ser una propiedad para la rotación con valores 0-10000? RotateDrawable documentación de no hablar acerca de esta propiedad!
    El código es de código abierto y miré a través de ella 🙁

    OriginalEl autor Mark Hetherington

  2. 3

    RotateDrawable no parece ser animado. En su lugar, usted tiene que utilizar setLevel para cambiar la rotación de la imagen.

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

    Y establecer el nivel de rotar la imagen:

    final ImageView image = (ImageView)findViewById(R.id.imageView1);
    final RotateDrawable drawable = (RotateDrawable)image.getDrawable();
    drawable.setLevel(500);
    Aún debo estar perdiendo algo aquí. Primero, ¿qué estás haciendo con el <rotar> etiqueta. Tu no inflar en cualquier lugar. Y el segundo intento para lanzar un dibujable a un RotateDrawable y obtener el siguiente elenco de excepción java.lang.ClassCastException: android.gráficos.dibujable.BitmapDrawable
    Supongo que mi ejemplo se supone que hay un diseño y que el diseño es el uso de un ImageView con el RotateDrawable. Si usted tiene un mapa de bits, la RotateDrawable referencias, no el diseño.
    ¿Cómo se determine la velocidad de la animación? He intentado varios valores de «duración», pero no parece hacer nada…

    OriginalEl autor Carson Reinke

  3. 2

    Este es un buen ejemplo de trabajo. Param duración se utiliza para animarlo.

    <?xml version="1.0" encoding="utf-8"?>
    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="4000"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="720" >
    
        <shape
            android:innerRadius="20dp"
            android:shape="ring"
            android:thickness="4dp"
            android:useLevel="false" >
            <size
                android:height="48dp"
                android:width="48dp" />
    
            <gradient
                android:centerY="0.5"
                android:endColor="@android:color/white"
                android:startColor="#00ffffff"
                android:type="sweep"
                android:useLevel="false" />
        </shape>
    
    </rotate>

    OriginalEl autor RexSplode

  4. 2

    Me gustaría añadir un ejemplo completo de la animación de un progreso icono en ImageView, se basa en la Marca Hetherington respuesta.

    Así que mi animación se ve como sigue:

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

    icono viene de https://material.io/icons/

    luego de mi presentación contiene un ImageView de la siguiente manera:

            <ImageView
                android:id="@+id/progress"
                android:layout_marginTop="0dp"
                android:layout_marginLeft="-3dp"
                android:layout_width="30dp"
                android:layout_height="30dp"
    
                android:visibility="gone"
                android:scaleType="fitCenter"
                android:background="@drawable/progress_anim"
                android:layout_gravity="center_horizontal|center_vertical"
                />

    y, finalmente, en el código cuando necesito mostrar animación que debo hacer:

        RotateDrawable rotateDrawable = ((RotateDrawable)progressImage.getBackground());
        ObjectAnimator anim = ObjectAnimator.ofInt(rotateDrawable, "level", 0, 10000);
        anim.setDuration(1000);
        anim.setRepeatCount(ValueAnimator.INFINITE);
        anim.start();

    OriginalEl autor marcinj

  5. 1

    No he trabajado con un RotateDrawable, pero si usted está simplemente tratando de animar la rotación en un gráfico, no la necesita. Dibujables con un «nivel» como RotateDrawable están destinados a transmitir información, en lugar de animar vistas.

    El siguiente código gira un ImageView alrededor de su centro:

    ImageView myImageView = (ImageView)findViewById(R.id.my_imageview);
    
    AnimationSet animSet = new AnimationSet(true);
    animSet.setInterpolator(new DecelerateInterpolator());
    animSet.setFillAfter(true);
    animSet.setFillEnabled(true);
    
    final RotateAnimation animRotate = new RotateAnimation(0.0f, -90.0f,
        RotateAnimation.RELATIVE_TO_SELF, 0.5f, 
        RotateAnimation.RELATIVE_TO_SELF, 0.5f);
    
    animRotate.setDuration(1500);
    animRotate.setFillAfter(true);
    animSet.addAnimation(animRotate);
    
    myImageView.startAnimation(animSet);
    Gracias por tu respuesta David. Si entiendo tu método correctamente, esta gira TODA la vista mientras que me gustaría, en última instancia, ser capaz de rotar/animar una sola Imagen en una vista, por ejemplo, un puntero gira sobre un fondo en el que se fijará como es la escala de un dial. Esta es la razón por la que estoy intentando utilizar el RotateDrawable pero por desgracia no se puede entender el docs!

    OriginalEl autor David Snabel-Caunt

  6. 1

    El código siguiente devuelve un objeto Dibujable contenedor que gira otro Dibujable programación:

    Drawable rotateDrawable(Drawable d, final float angle) {
        //Use LayerDrawable, because it's simpler than RotateDrawable.
        Drawable[] arD = {
            d
        };
        return new LayerDrawable(arD) {
            @Override
            public void draw(Canvas canvas) {
                canvas.save();
                canvas.rotate(angle);
                super.draw(canvas);
                canvas.restore();
            }
        };
    }
    olvidó poner el eje en la rotate() función. aquí hay una solución mejor: stackoverflow.com/a/21376008/878126

    OriginalEl autor Adam Gawne-Cain

  7. 1

    Manualmente se pueden llamar RotatedDrawable.setLevel() para girar la imagen, o usted puede leer el código de barra de progreso, el indeterminado dibujable es un LayerDrawable cuyos hijos fueron RotatedDrawable, como este:

    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <rotate
                 android:drawable="@drawable/spinner_48_outer_holo"
                 android:pivotX="50%"
                 android:pivotY="50%"
                 android:fromDegrees="0"
                 android:toDegrees="1080" />
        </item>
        <item>
            <rotate
                 android:drawable="@drawable/spinner_48_inner_holo"
                 android:pivotX="50%"
                 android:pivotY="50%"
                 android:fromDegrees="720"
                 android:toDegrees="0" />
        </item>
    </layer-list>

    La rotación de animación fue impulsado por ProgressBar del método onDraw.

    OriginalEl autor liuyong

Dejar respuesta

Please enter your comment!
Please enter your name here