Inclinar una vista de texto en Android
Estoy tratando de replicar lo siguiente en mi aplicación:
- Android webview permanecer en la aplicación
- Comando de voz para desbloquear la pantalla de Android
- ¿Cómo obtener ClassCastException cuando intenta insertar RelativeLayout dyanmically?
- Android: Dibujo de un botón como spinner
- Render texto nítido con Canvas.drawText en Android
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:
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
- ¿Por qué ProgressBar detiene la animación mientras cambia el diseño en Android?
- Animar la imagen .png en el widget
- Prevenga la tecla 'Enter' para activar TextWatcher
- Android obtener la posición del elemento seleccionado en gridview
- Android redondeado esquina textview con redondeo perfecto en la esquina
- ¿Cómo iniciar una actividad desde un widget de lockscreen, sin desbloquear?
- Anulación del estilo de lista desplegable para Spinner en el modo de diálogo
- Resaltar para el elemento seleccionado en la lista expandible
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:
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
- ¿Cómo puedo crear una vista de desplazamiento circular 3D para Texto? (Como se ve en Appy Geek)
- Manejo de excepciones y ciclo de vida en Android?