2012-07-07 17 views
9

szukam replikować następujące w moim aplikacji:Pochylanie widok tekstowy w Androidzie

enter image description here

Jak widać, jego po prostu przycisk, który zwiększa/zmniejsza wartość widoku tekstu zawartego w jego obrębie. Ten przycisk będzie miał trzy stany wizualne -> wciśnięty, zmniejszy i zwiększy (jak widać na powyższym obrazku, użytkownik klika strzałki zwiększania i przycisk pojawia się wciśnięty po tej stronie)

Oto moje stany przycisku 3 obecnie:

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

Jak widać, problem mam, to jest w stanie poprawnie pochylać/obracać widok tekstowy więc wygląda poprawne wizualnie i pojawia pochyły wraz z przyciskiem, gdy jej jest zwiększenie lub zmniejszony.

Próbowałem dwa różne podejścia do tej pory:

  • stworzenie własnego tekstu klasy widoku, który zastępuje metodę onDraw() aby pochylić kanwie:

    @Override 
    public void onDraw(Canvas canvas) { 
        canvas.save(); 
    
        canvas.skew(0.2f, 0f); 
    
        super.onDraw(canvas); 
        canvas.restore(); 
    } 
    
  • zintegrować Rotate3dAnimation klasa (źródło here) i wykorzystano wiele różnych odmian, aby uzyskać pożądany wynik, taki jak:

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

Niestety, nie jestem całkiem uzyskanie dokładnego wyniku, który odzwierciedla pierwsze zdjęcie powyżej. Dezorientuje mnie ustawianie wartości za pomocą osi Z, pochylanie, obracanie itp.

Bardzo doceniam każdą pomoc od każdego, kto ma doświadczenie w tej dziedzinie. Dzięki z góry

Odpowiedz

7

Dobrze Próbowałem nawet i wymyśliłem coś takiego:

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

     } 
    } 

mam wyjścia jak:

enter image description here

Chyba zmianę wartości metodą prób i błąd może rozwiązać twój problem. Mam nadzieję, że to pomaga.

+0

Hi Parth onCreate(), dzięki za odpowiedź. Łącząc te dwa podejścia i tak jak powiedziałeś, nieznacznie zmieniając wartości, jestem zadowolony z wyniku końcowego. Chyba bym się tam udało, ale twoja odpowiedź przyspieszyła :) – elgoog

+2

Dlaczego działanie rozszerza TextView? Z pewnością to tylko mylące .. –

+1

To po prostu zły wybór nazwy @JamesGoodwin, ale działa świetnie! – Mars

0

Dzięki odpowiedzi Partha Doshi. Jego odpowiedź wymaga trochę szarpnięć, którymi mogę się podzielić, aby ratować kogoś innego.

Najpierw utwórz klasę w folderze src i napisz wszystkie trzy konstruktory.

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

} 

}

W Tobie res/layout/my_layout.xml plik można dodać znacznik swojego zamówienie 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 --> 
/> 

Jak każdy inny widok, można utworzyć instancję TextViewDemo w swojej metodzie

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

Pozdrawiam

Powiązane problemy