Autore Topic: Calcolo distanza tra immagini  (Letto 654 volte)

Offline E.Musso

  • Utente junior
  • **
  • Post: 82
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy GT-S5660
  • Play Store ID:
    Emiliano Musso
  • Sistema operativo:
    Windows 7
Calcolo distanza tra immagini
« il: 29 Dicembre 2011, 18:34:23 CET »
0
Buona sera a tutti,
espongo un problema legato al calcolo della distanza tra immagini che vengono scritte su un canvas.
Sostanzialmente, ho una View con il metodo onDraw in override, ed al suo interno devo splittare una stringa (il separatore è lo spazio). Fin qui tutto ok.

Per ciascun elemento dello split, devo scrivere una data immagine sul canvas (l'array dCharMap è un array di interi, valorizzato con una certa schiera di referenze drawable). Parto a scrivere le immagini dalla destra del canvas, per spostarmi ad ogni occorrenza verso sinistra.

Il problema nasce qui: le immagini (contenute in drawable-hdpi), sono larghe 48px, ma vengono ovviamente ridimensionate a seconda delle risoluzioni del device. Il valore di 51, numero di pixel che sottraggo tra un elemento ed il successivo, fa sì che su schermi a risoluzione media gli elementi paiano correttamente vicini, mentre su risoluzioni più piccole sono troppo distanti.

Avrei necessità di fissare un valore dinamico al posto di 51, credo calcolato applicando un coefficiente di correzione legato alla risoluzione....ma non ho ancora trovato una soluzione.  :-P

C'è qualcuno che può aiutarmi?
A seguire il codice del metodo onDraw della View (anche se è una questione più concettuale che di codice).
Anticipatamente grazie.

Codice (Java): [Seleziona]
   @Override
   protected void onDraw(Canvas canvas) {
      Resources    mRes      = getResources();
      Paint        bitPaint  = new Paint(Paint.ANTI_ALIAS_FLAG);
         
      int          cLeft     = canvas.getWidth()-120;
      String     dWord   = "TESTO DI PROVA";
      if (dWord.compareTo("")==0) return;
     
          String[]     dChars  = dWord.split("\\s+");
          if (dChars.length==0) return;
         
          for (int j=0; j<dChars.length; j++){
                  Drawable d         = mRes.getDrawable(dCharMap[Integer.parseInt(dChars[j])]);
                  Bitmap   bitLetter = ((BitmapDrawable)d).getBitmap();
                  canvas.drawBitmap(bitLetter, cLeft, 15, bitPaint);             
                  cLeft -=51;
          }
   }
}
Bollettazione Interventi - Un taglio ai costi di tipografia per professionisti!
--
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Calcolo distanza tra immagini
« Risposta #1 il: 29 Dicembre 2011, 18:44:18 CET »
+1
Potresti usare il tipo di risorsa "dimensione"

More Resource Types | Android Developers

Potresti ad esempio creare 4 tipi di cartella values, tipo values-hdpi, values-mdpi, values-ldpi, values-xhdpi e gli inserisci dentro il file con la dimensione apposita

Offline E.Musso

  • Utente junior
  • **
  • Post: 82
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy GT-S5660
  • Play Store ID:
    Emiliano Musso
  • Sistema operativo:
    Windows 7
Re:Calcolo distanza tra immagini
« Risposta #2 il: 29 Dicembre 2011, 20:10:34 CET »
0
Grazie mille, proverò ad andare in questa direzione  :-)
Bollettazione Interventi - Un taglio ai costi di tipografia per professionisti!
--
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato

Offline E.Musso

  • Utente junior
  • **
  • Post: 82
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy GT-S5660
  • Play Store ID:
    Emiliano Musso
  • Sistema operativo:
    Windows 7
Re:Calcolo distanza tra immagini
« Risposta #3 il: 30 Dicembre 2011, 19:07:09 CET »
0
Alla fine ho trovato una soluzione più diretta: il valore prelevato dalla bitmap con il metodo getWidth() non è assoluto, ma relativo alla risoluzione corrente. In questo modo, al posto del valore fisso è sufficiente inserire la larghezza dell'immagine stessa.
Bollettazione Interventi - Un taglio ai costi di tipografia per professionisti!
--
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato