Domanda

Sto lavorando con la versione 1.6 del codice scanner di codici a barre Zxing.

Sebbene la versione di questa app dal mercato Android (3.53) funzioni bene sul mio incredibile, ViewFinDerview sembra sbagliato quando lo compilo da solo (3.5beta).

Ho scoperto che la dimensione della tela predefinita di ViewFinDerview (che riempie l'intero schermo) è 533x320, mentre le dimensioni dello schermo effettive sono 800x480.

Quindi, nel metodo OnDraw, ViewFinDerview assume coordinate per lo schermo per il rettangolo del mirino, ma applicandole nelle coordinate di tela di Ondraw. Ciò si traduce nel fatto che il mirino viene disegnato troppo lontano e troppo grande nelle dimensioni X e Y.

Quindi cosa determina che le dimensioni reali della tela sono la tua vista? Nel mio caso, la tela viene ridimensionata di un terzo rispetto alle coordinate dello schermo. Non riesco a trovare differenze nel codice che potrebbero influire su questo tra le versioni 3.5beta e 3.53.

È stato utile?

Soluzione

Credo che l'applicazione non dichiari supporto per gli schermi con densità variabile. C'è un tag chiamato <supports-screens> In Androidmanifest.xml e ha un parametro anyDensity. Se impostato su true, si presume che l'applicazione possa gestire schermate con densità diverse, se impostato su false, Android ridimensiona lo schermo stesso in modo che l'app possa disegnare sullo schermo di una dimensione diversa rispetto all'effettivo a seconda della densità dello schermo.

Per impostazione predefinita questo parametro è impostato su true Se l'applicazione si rivolge al livello API di 4 e superiore e a false altrimenti. Questo viene fatto perché prima che le applicazioni Android 1.6 fossero fatte per una dimensione e una densità dello schermo fisse e iniziando con Android 1.6 questo è cambiato, quindi è stata mantenuta la competenza all'indietro.

Nel tuo caso lo schermo ha un'alta densità, che corrisponde a un coefficiente 1.5. Quindi, se si disegna su uno schermo con l'altezza di 800 px, questo è considerato lo stesso del disegno sullo schermo di 533 px con densità normale.

Se vuoi il Canvas per avere la dimensione "reale", anyDensity deve essere impostato su true o quantomeno minSdkVersion a 4 e superiore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top