Autore Topic: Gauge con Animation  (Letto 1040 volte)

Offline Lomba1986

  • Utente normale
  • ***
  • Post: 173
  • Respect: +1
    • Mostra profilo
Gauge con Animation
« il: 22 Marzo 2012, 12:34:27 CET »
0
Ciao a tutti, stamattina mi sono cimentato nel tentativo di fare un Gauge (una sorta di indicatore tipo contachilomentri) che può andare bene per svariati casi e serve per rappresentare in modo rapido ed efficacie dei valori...

Ho pensato di usare la classe Animation con il metodo Rotate, ma qui sono iniziati i problemi...non tanto di errori di sintassi, ma di comprensione degli effetti...

Codice (Java): [Seleziona]
animation2 = new RotateAnimation(0,180,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
Su un tutorial ho trovato la seguente stringa di codice e ho capito tutto tranne cosa vuol dire "0.5f"..cioè ho capito che indica un punto a metà della figura, ma "f" dov'è definita??

Non esistono problemi, ma solo soluzioni...

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Gauge con Animation
« Risposta #1 il: 22 Marzo 2012, 12:40:22 CET »
0
Lungi da me dirti di non seguire la strada che hai scelto, però da quanto vedo in giro (ho scritto vedo perchè non ho mai fatto niente del genere), l'approccio più usato è creare una Custom View che disegna sul Canvas la gauge.

Guarda un po' qua:
Android Custom UI: Making a Vintage Thermometer «  Mind The Robot
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Lomba1986

  • Utente normale
  • ***
  • Post: 173
  • Respect: +1
    • Mostra profilo
Re:Gauge con Animation
« Risposta #2 il: 22 Marzo 2012, 12:47:10 CET »
0
WOW...bella la guida che mi hai passato...

Grazie mille...proverò a seguirla e vedere di capirci qualcosa...

Nel frattempo però mi tengo da parte anche l'AnimationTranslate che magari per piccolo raffigurazioni lineari mi conviene...tu che cosa ne pensi?
Non esistono problemi, ma solo soluzioni...

Offline Lomba1986

  • Utente normale
  • ***
  • Post: 173
  • Respect: +1
    • Mostra profilo
Re:Gauge con Animation
« Risposta #3 il: 22 Marzo 2012, 15:22:54 CET »
0
Sto guardando la guida che mi ha consigliato...

e ho un dubbio non indifferente: come lega le due classi Thermometer e ThermometerActivity?

Nel senso dov'è che la thermometerActivity richiama o comunque fa riferimento alla Thermometer(che è quella che contiene tutte le definizioni)?

Ciao
Non esistono problemi, ma solo soluzioni...

Offline Lomba1986

  • Utente normale
  • ***
  • Post: 173
  • Respect: +1
    • Mostra profilo
Re:Gauge con Animation
« Risposta #4 il: 22 Marzo 2012, 15:57:00 CET »
0
Splulciando il codice ho controllato anche l'xml...e ho notato che viene richiamata una funzione della classe Thermometer, la funzione init(), e questa viene richiamata praticamente quando si esegue la chiamata
Codice (Java): [Seleziona]
setContentView(R.layout.main);
di seguito ho postato il codice di main.xml

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">
  <TextView
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="@string/hello" />
  <com.mindtherobot.samples.thermometer.Thermometer    
   android:id="@+id/thermometer"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content" />

è possibile che la riga "com.mindtherobot.samples.thermometer.Thermometer" svolga la funzione di legare le due classi themomether e ThermometerActivity?

Altra cosa è che la classe Thermometer è piena di funzione per il disegno di tutti gli elementi ma non riesco a capire chi richiama chi..

Ciao a grazie per l'aiuto
Non esistono problemi, ma solo soluzioni...

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Gauge con Animation
« Risposta #5 il: 22 Marzo 2012, 17:05:09 CET »
0
Guarda un po' qua:
Android Custom UI: Making a Vintage Thermometer &laquo;  Mind The Robot
Il link mi viene segnalato come infetto. Può darsi sia un falso positivo eh però visto che ci sono avviso.  :-)

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Gauge con Animation
« Risposta #6 il: 22 Marzo 2012, 23:37:55 CET »
0
Non trovi riferimenti nel codice dell'Activity perchè probabilmente questa non manipola il componente, che viene inflatato dall'xml di layout.

Quella riga a cui fai riferimento è proprio il tag del componente custom, ovvero il nome della classe (Thermometer) completo del package (com.mindtherobot.samples.thermometer). É altresì possibile definire attributi custom e farli leggere lato Java.

La funzione init() invece raccoglie le chiamate per inizializzare gli strumenti grafici (il Paint per esempio) e viene richiamato in tutti e tre i costruttori per evitare duplicazioni di codice.   

Offline Lomba1986

  • Utente normale
  • ***
  • Post: 173
  • Respect: +1
    • Mostra profilo
Re:Gauge con Animation
« Risposta #7 il: 04 Aprile 2012, 11:27:33 CEST »
0
Ciao a tutti...finalmente sono tornato a guardare e cercare di capire l'esempio del thermometer...

La domanda che vi pongo è:

come mai quando disegna qualcosa a schermo come ad esempio nel pezzo di codice seguente:

Codice (Java): [Seleziona]
        private void drawHand(Canvas canvas) {
                System.out.println("----> drawHand");
                if (handInitialized) {
                        float handAngle = degreeToAngle(handPosition);
                        canvas.save(Canvas.MATRIX_SAVE_FLAG);
                        canvas.rotate(handAngle, 0.5f, 0.5f);
                        canvas.drawPath(handPath, handPaint);
                        canvas.restore();
               
                        canvas.drawCircle(0.5f, 0.5f, 0.01f, handScrewPaint);
                }

come mai prima salva la configurazione della canvas (canvas.save(Canvas.MATRIX_SAVE_FLAG); ) e poi effettua il caricamento delle vecchie impostazioni (canvas.restore(); ) ??

Qualcuno mi sa spiegare come mai?
Non esistono problemi, ma solo soluzioni...