Inclinar una vista de texto en Android

Estoy tratando de replicar lo siguiente en mi aplicación:

Introduzca aquí la descripción de la imagen

Como puede ver, es básicamente un botón que aumenta / disminuye el valor de la vista de texto contenida dentro de él. Este botón tendrá tres estados visuales -> no presionados, disminuir y aumentar (como se ve en la imagen anterior, el usuario pulsa las flechas de aumento y el botón aparece presionado en ese lado)

Aquí están mis 3 estados del botón actualmente:

Introduzca aquí la descripción de la imagenIntroduzca aquí la descripción de la imagenIntroduzca aquí la descripción de la imagen

Como se puede ver, el problema que tengo es ser capaz de desviar / girar correctamente la vista de texto por lo que parece visualmente correcta y aparece inclinado junto con el botón cuando su aumento o disminución.

He intentado hasta ahora dos enfoques diferentes:

  • Cree una clase de vista de texto personalizada que reemplaza al método onDraw() para inclinar el lienzo:

     @Override public void onDraw(Canvas canvas) { canvas.save(); canvas.skew(0.2f, 0f); super.onDraw(canvas); canvas.restore(); } 
  • Integre la clase Rotate3dAnimation (fuente aquí ) y use muchas variaciones diferentes para obtener el resultado deseado como:

      Rotate3dAnimation skew = new Rotate3dAnimation( 30, 0, centerX, centerY, 0, false); txtAmount.startAnimation(skew); 

Desafortunadamente, no estoy consiguiendo exactamente el resultado exacto que refleja la primera imagen de arriba. Me estoy confundiendo con los valores de ajuste con el eje Z, sesgar, rotar, etc.

Apreciaría grandemente cualquier ayuda de cualquier persona que tenga experiencia con esto. Gracias por adelantado

Bueno, incluso intenté y me vino con algo como esto:

  public class DemoActivity extends TextView { Context context; String firstText = "$120.00"; public DemoActivity(Context context) { super(context); this.context = context; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); setText(firstText); setTextSize(30); canvas.skew(1.0f, 0.3f); //you need to change values over here Rotate3dAnimation skew = new Rotate3dAnimation( -20, 30,200, 200, 0, false); //here too startAnimation(skew); } } 

Tengo una salida como:

Introduzca aquí la descripción de la imagen

Supongo que el cambio de los valores por ensayo y error puede resolver su problema. Espero eso ayude.

Gracias a la respuesta de Parth Doshi. Su respuesta necesita un poco de ajuste para ejecutar lo que estoy compartiendo aquí para salvar a alguien más tiempo.

Primero crea una clase en la carpeta src y escribe todos los tres constructores.

 public class TextViewDemo extends TextView { Context context; String text = "TESTING 3DX TOOLS"; public TextViewDemo(Context context) { super(context); this.context = context; } public TextViewDemo(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; } public TextViewDemo(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.context = context; } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); setText(text); setTextSize(30); canvas.skew(0.5f, 1.0f); // you need to change values over here Rotate3dAnimation skew = new Rotate3dAnimation(-50, 30, 0, 0, 0, false); // here too startAnimation(skew); } 

}

En su archivo res / layout / my_layout.xml puede agregar una etiqueta de su TextView personalizado.

 <com.yourpackage.name.TextViewDemo android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="Hello World" <!-- All parameters and value shall remain same --> /> 

Al igual que cualquier otra vista, puede crear una instancia de TextViewDemo en su método onCreate ()

 TextViewDemo txtDemo = (TextViewDemo) findViewById(R.id.name); 

Saludos

  • Android reproduciendo música en fondo
  • Evento de clic de botón para el widget android
  • Android: Agregar elementos de interfaz de usuario a una vista de forma programática
  • Conversión de RemoteView en una vista
  • android: Establecer programaticamente alinear en RemoteView
  • ¿Cómo implementar widget de rueda como en el iPhone?
  • Múltiples tamaños de widgets
  • Widget de la pantalla de inicio de Android: RemoteViews setRemoteAdapter (...) método no funciona en API 11+
  • Problema de actualización de un widget de aplicación mediante colección
  • Cambiar el color de la palabra en la cadena de recursos
  • Android Diferencia entre View.getLeft () vs View.getScrollX ()
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.