Reducir animadamente el tamaño del botón en la prensa y recuperar su tamaño en la versión
Quiero un para crear un botón que cambia de tamaño (poco más pequeño) cuando se presiona, y después de que el botón se libera de nuevo el tamaño debe cambiar de nuevo a tamaño normal. Estoy utilizando Escala xml para lograr esto, pero se volvió a colocar incluso si no suelto el botón.
botón aquí me refiero a imageview.
- OnTouch dando extraños puntos de contacto Android
- Analog SetOnTouchListener o cómo se utiliza en xamarin, qué argumento debe ser
- OnTouch funciona, pero OnClickListener no?
- Gire la vista de disposición de androide sobre su centro usando el oyente táctil
- Cómo implementar OnTouch Listener en XML
aquí está mi código fuente: –
imgSpin = (ImageView) findViewById(R.id.iv_spins); imgSpin.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: imgSpin.startAnimation(mAnimation); spinslot(); break; case MotionEvent.ACTION_UP: imgSpin.clearAnimation(); imgSpin.setEnabled(false); break; } return true; } });
mi escala Xml: –
<scale xmlns:android="http://schemas.android.com/apk/res/android" android:duration="200" android:fromXScale=".8" android:fromYScale=".8" android:pivotX="50%" android:pivotY="50%" android:toXScale="1.0" android:toYScale="1.0" > </scale>
mi XML: –
<LinearLayout android:id="@+id/layout_status" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight=".2" android:orientation="horizontal" > <View android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight=".5" /> <ImageView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2.1" android:background="@drawable/bootser" /> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2.5" android:background="@drawable/bet_bg" android:gravity="center_vertical" android:orientation="horizontal" android:weightSum="1" > <ImageView android:layout_width="0dp" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:layout_weight=".2" android:src="@drawable/leftarrow" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="1dp" android:layout_weight=".6" android:gravity="center" android:text="Bet" android:textColor="@android:color/white" /> <ImageView android:layout_width="0dp" android:layout_height="40dp" android:layout_gravity="center_vertical" android:layout_weight=".2" android:src="@drawable/rightarrow" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2.5" android:background="@drawable/container" android:gravity="center" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:text="winning" android:textColor="@android:color/white" /> </LinearLayout> <ImageView android:id="@+id/iv_spins" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1.9" android:background="@drawable/spin" /> <View android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight=".5" /> </LinearLayout>
Intenté con paramLayout pero como fijé los pesos en XML así que no me da el efecto en la animación.
ya uso este enfoque: –
case MotionEvent.ACTION_DOWN: ViewGroup.LayoutParams params = imgSpin.getLayoutParams(); // Button new width params.width = params.width - (params.width *90/100); imgSpin.setLayoutParams(params); break;
params.width siempre me devuelve cero por lo que traté de hacer esto con el peso, mediante el uso de peso mi visión falla en el clic .. quiero que sea suave, así que estoy preferir la escala
Segundo enfoque: –
case MotionEvent.ACTION_DOWN: LinearLayout.LayoutParams params = (android.widget.LinearLayout.LayoutParams) imgSpin .getLayoutParams(); // Button new width params.weight = 1.7f; imgSpin.setLayoutParams(params); // imgSpin.startAnimation(mAnimation); // spinslot(); break; case MotionEvent.ACTION_UP: LinearLayout.LayoutParams params2 = (android.widget.LinearLayout.LayoutParams) imgSpin .getLayoutParams(); // Button new width params2.weight = 1.9f; imgSpin.setLayoutParams(params2); // imgSpin.clearAnimation(); imgSpin.setEnabled(false); break; } return true;
funciona pero no es suave
Por favor dime como hacer
Gracias
- Limitación de Drag de ImageView en Android
- Ver sólo el registro de MotionEvent.ACTION_DOWN
- Manejo del evento de toque Intercept sin extender ViewGroup
- ¿Cómo puedo pasar Touch Listeners a la vista personalizada para arrastrar y soltar?
- Obtener coordenadas reales de xy de los usuarios
- Android: ¿Qué uso tiene AnchorView de MediaController?
- ¿Cómo puedo mantener los eventos de ontouch manejados por un widget incluso si las coordenadas de tacto ya no están dentro del widget, en android
- Android: ImageView getID (); Devolver entero
Esto es lo que quieres:
imgSpin.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: ObjectAnimator scaleDownX = ObjectAnimator.ofFloat(imgSpin, "scaleX", 0.8f); ObjectAnimator scaleDownY = ObjectAnimator.ofFloat(imgSpin, "scaleY", 0.8f); scaleDownX.setDuration(1000); scaleDownY.setDuration(1000); AnimatorSet scaleDown = new AnimatorSet(); scaleDown.play(scaleDownX).with(scaleDownY); scaleDown.start(); spinslot(); break; case MotionEvent.ACTION_UP: ObjectAnimator scaleDownX2 = ObjectAnimator.ofFloat( imgSpin, "scaleX", 1f); ObjectAnimator scaleDownY2 = ObjectAnimator.ofFloat( imgSpin, "scaleY", 1f); scaleDownX2.setDuration(1000); scaleDownY2.setDuration(1000); AnimatorSet scaleDown2 = new AnimatorSet(); scaleDown2.play(scaleDownX2).with(scaleDownY2); scaleDown2.start(); imgSpin.setEnabled(false); break; } return true; } });
Y acaba de hacer algunos cambios en su xml: –
<ImageView android:id="@+id/iv_spins" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1.9" android:adjustViewBounds="true" android:background="@drawable/spin" android:scaleX="1" android:scaleY="1" />
Puede añadir la propiedad fillafter: android: fillAfter = "true"
<scale xmlns:android="http://schemas.android.com/apk/res/android" android:duration="200" android:fromXScale=".8" android:fromYScale=".8" android:pivotX="50%" android:pivotY="50%" android:fillAfter="true" android:toXScale="1.0" android:toYScale="1.0" > </scale>
<ImageView android:id="@+id/iv_spins" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1.9" android:adjustViewBounds="true" android:background="@drawable/spin" android:scaleX="1" android:scaleY="1" />
Mejores prácticas de Android (para su requerimiento):
1- Crea dos XML en / res / animator
yo. reduce_size.xml
<?xml version="1.0" encoding="utf-8"?> <set android:ordering="sequentially" xmlns:android="http://schemas.android.com/apk/res/android"> <set> <objectAnimator android:propertyName="scaleX" android:duration="300" android:valueTo="0.9f" android:valueType="floatType"/> <objectAnimator android:propertyName="scaleY" android:duration="300" android:valueTo="0.9f" android:valueType="floatType"/> </set> </set>
Ii. regain_size.xml
<?xml version="1.0" encoding="utf-8"?> <set android:ordering="sequentially" xmlns:android="http://schemas.android.com/apk/res/android"> <set> <objectAnimator android:propertyName="scaleX" android:duration="1000" android:valueTo="1f" android:startOffset="300" android:valueType="floatType"/> <objectAnimator android:propertyName="scaleY" android:duration="1000" android:valueTo="1f" android:startOffset="300" android:valueType="floatType"/> </set> </set>
2- Uso
yo. Cuando MotionEvent.ACTION_DOWN
AnimatorSet reducer = (AnimatorSet) AnimatorInflater.loadAnimator(mContext,R.animator.squeeze_in); reducer.setTarget(view); reducer.start();
Ii. Cuando MotionEvent.ACTION_UP
AnimatorSet regainer = (AnimatorSet) AnimatorInflater.loadAnimator(mContext,R.animator.squeeze_out); regainer.setTarget(view); regainer.start();
Esta solución se prueba a fondo y se garantiza para alcanzar su requisito.
- ¿Cómo haces que dos aplicaciones de Android compartan el mismo ID de usuario?
- Vista personalizada de Android delegado de grupo addView