9

sto cercando di replicare il seguente all'interno della mia applicazione:Inclinazione una vista testo in Android

enter image description here

Come si può vedere, la sua fondamentalmente un tasto che aumenta/diminuisce il valore della visualizzazione testo contenuto al suo interno Questo pulsante avrà tre stati visivi -> non compressi, diminuirà e aumenterà (come mostrato nell'immagine sopra, l'utente tocca le frecce di aumento e il pulsante appare premuto da quel lato)

Ecco i miei 3 stati tasto attualmente:

enter image description here enter image description here enter image description here

Come si può vedere, il problema che ho è essere in grado di inclinare correttamente/ruotare la vista del testo in modo che appaia visivamente corretto e si presentasse inclinato con il pulsante quando una sua rivalutazione o diminuito.

Ho provato due diversi approcci finora:

  • creare una vista di classe di testo personalizzato che sostituisce il metodo onDraw() per inclinare la tela:

    @Override 
    public void onDraw(Canvas canvas) { 
        canvas.save(); 
    
        canvas.skew(0.2f, 0f); 
    
        super.onDraw(canvas); 
        canvas.restore(); 
    } 
    
  • integrare il Rotate3dAnimation classe (fonte here) e utilizzato molte varianti per ottenere il risultato desiderato, ad esempio:

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

Purtroppo, io non sono molto ottenere il risultato esatto che rispecchia la prima immagine qui sopra. Mi sto confondendo con l'impostazione di valori con l'asse Z, inclinazione, rotazione ecc.

Apprezzerei molto l'aiuto di chiunque abbia esperienza con questa roba. Grazie in anticipo

risposta

7

Beh ho anche provato e mi è venuto su con qualcosa di simile:

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); 

     } 
    } 

ho avuto un'uscita come:

enter image description here

Credo che cambiando i valori per tentativi ed l'errore può risolvere il tuo problema. Spero che aiuti.

+0

Ciao Parth, grazie per la risposta. Combinando i due approcci e come hai detto tu, cambiando leggermente i valori, sono contento del risultato finale. Credo che ci sarei arrivato alla fine, ma la tua risposta lo ha accelerato :) – elgoog

+2

Perché un'attività estende un TextView? Sicuramente questo è solo confuso .. –

+1

è solo una brutta scelta di nome @JamesGoodwin ma funziona benissimo! – Mars

0

Grazie alla risposta Parth Doshi. La sua risposta ha bisogno di un piccolo ritocco per eseguire ciò che sto condividendo qui per salvare qualcun altro tempo.

Prima creare una classe nella cartella src e scrivere tutti e tre i costruttori.

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); 

} 

}

In te res/layout/my_layout.xml file, è possibile aggiungere un tag della tua misura TextView.

<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 --> 
/> 

Come qualsiasi altra vista, è possibile creare un'istanza di TextViewDemo nel metodo onCreate()

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

saluti

Problemi correlati