texto studio redondo personalizar imagen efectos diseño con botones boton bar agregar android button animated shake

studio - ¿Cómo animar botón en Android?



menu overflow android studio (6)

Dependencia

Agréguelo a su root build.gradle al final de los repositorios:

allprojects { repositories { ... maven { url "https://jitpack.io" } }}

y luego agregue dependencias de dependencies { compile ''com.github.varunest:sparkbutton:1.0.5'' }

Uso

XML

<com.varunest.sparkbutton.SparkButton android:id="@+id/spark_button" android:layout_width="40dp" android:layout_height="40dp" app:sparkbutton_activeImage="@drawable/active_image" app:sparkbutton_inActiveImage="@drawable/inactive_image" app:sparkbutton_iconSize="40dp" app:sparkbutton_primaryColor="@color/primary_color" app:sparkbutton_secondaryColor="@color/secondary_color" />

Java (Opcional)

SparkButton button = new SparkButtonBuilder(context) .setActiveImage(R.drawable.active_image) .setInActiveImage(R.drawable.inactive_image) .setDisabledImage(R.drawable.disabled_image) .setImageSizePx(getResources().getDimensionPixelOffset(R.dimen.button_size)) .setPrimaryColor(ContextCompat.getColor(context, R.color.primary_color)) .setSecondaryColor(ContextCompat.getColor(context, R.color.secondary_color)) .build();

Estoy creando una aplicación para Android, y tengo un botón que conduce a un lugar de mensajería. En la actividad con el botón, verifico si hay mensajes no leídos, y si es así, quiero hacer algo al botón para que el usuario sepa que hay algo no leído.

Estaba pensando en que el botón sorta vibrase horizontalmente como 3 sacudidas cada 2 o 3 segundos.

Sé cómo ejecutar un hilo en el fondo que hace algo cada x milisegundos. Pero lo que no sé qué hacer es sacudirlo horizontalmente 3 veces.

¿Alguien puede ayudarme con esto?

Estaba pensando en usar la función sin, para la animación, puedo usar la salida de una función sin para obtener valores que suben y bajan, lo que puedo establecer la posición horizontal del botón ... Pero esto parece demasiado extremo, es hay una mejor manera?

Gracias.



No puedo comentar sobre el comentario de @ omega porque no tengo suficiente reputación, pero la respuesta a esa pregunta debería ser algo como:

shake.xml

<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="100" <!-- how long the animation lasts --> android:fromDegrees="-5" <!-- how far to swing left --> android:pivotX="50%" <!-- pivot from horizontal center --> android:pivotY="50%" <!-- pivot from vertical center --> android:repeatCount="10" <!-- how many times to swing back and forth --> android:repeatMode="reverse" <!-- to make the animation go the other way --> android:toDegrees="5" /> <!-- how far to swing right -->

Class.java

Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake); view.startAnimation(shake);

Esta es solo una forma de hacer lo que quiere, puede haber mejores métodos por ahí.


crear shake.xml en la carpeta anim

<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0" android:toXDelta="10" android:duration="1000" android:interpolator="@anim/cycle" />

y cycle.xml en la carpeta anim

<?xml version="1.0" encoding="utf-8"?> <cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android" android:cycles="4" />

Ahora agrega animación en tu código

Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake); anyview.startAnimation(shake);

Si desea una animación vertical, cambie el valor de Xdelta y toXdelta por el de Fromdeldel y toYdelta


Clase.java

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_with_the_button); final Animation myAnim = AnimationUtils.loadAnimation(this, R.anim.milkshake); Button myButton = (Button) findViewById(R.id.new_game_btn); myButton.setAnimation(myAnim); }

Para hacer clic en el botón

myButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { v.startAnimation(myAnim); } });

Crea la carpeta anim en el directorio res

Haga clic derecho en, res -> Nuevo -> Directorio

Nombra el nuevo directorio anim

crear un nuevo archivo xml nombrarlo batido

milkshake.xml

<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="100" android:fromDegrees="-5" android:pivotX="50%" android:pivotY="50%" android:repeatCount="10" android:repeatMode="reverse" android:toDegrees="5" />


import android.view.View; import android.view.animation.Animation; import android.view.animation.Transformation; public class HeightAnimation extends Animation { protected final int originalHeight; protected final View view; protected float perValue; public HeightAnimation(View view, int fromHeight, int toHeight) { this.view = view; this.originalHeight = fromHeight; this.perValue = (toHeight - fromHeight); } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { view.getLayoutParams().height = (int) (originalHeight + perValue * interpolatedTime); view.requestLayout(); } @Override public boolean willChangeBounds() { return true; } }

uss para

HeightAnimation heightAnim = new HeightAnimation(view, view.getHeight(), viewPager.getHeight() - otherView.getHeight()); heightAnim.setDuration(1000); view.startAnimation(heightAnim);