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.
Echa un vistazo a este tutorial. Tiene formas de diferentes animaciones.
http://android-er.blogspot.com/2012/02/apply-animation-on-button.html
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
@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);