2013-03-12 22 views
5

sto usando un Nexus 7 1280x800 android 4.2.2 API 17dimensione dello schermo utilizzabile

voglio ottenere la dimensione dello schermo per dividerlo in sezioni quadrate della stessa altezza e larghezza.

Sto usando FrameLayout ei miei quadrati sono sottoclassi di ImageView.

faccio questo

context.getResources().getDisplayMetrics().heightPixels; ----> 1205 context.getResources().getDisplayMetrics().widthPixels; ------> 800

suppongo 1205 non è 1280, perché ci sono due menu Android sulla parte superiore e inferiore dello schermo.

Ciascuno dei miei quadrati è di 30x30 px.

sapere quante piazze che posso trarre da Maximun faccio io:

int x=1205/30;

Quando cerco di dipingere la mia immagine su coordinate (x-1)*30 ,y è tratto parzialmente fuori dallo schermo.

Come posso sapere la porzione di schermo che può utilizzare la mia applicazione?

Spero di aver spiegato bene il mio problema.

Molte grazie.

+0

+1! Bella domanda! Non ci ho mai pensato in questo modo. Spero di poter imparare qualcosa di nuovo anche dalla tua domanda! – Swayam

+0

stai mescolando x e y per disegnare le coordinate perché hai x come altezza/30 e disegni (x, y) ?? – JRowan

+0

in realtà stai ricevendo le dimensioni dello schermo dell'app, non le dimensioni del dispositivo .. –

risposta

3

Se tutte le piazze sono nella stessa ImageView, quindi direi che il modo più semplice è quello di creare il proprio IMAGEVIEW:

class MyImageView extends ImageView { 
    Context context; 
    int myWidth = 0; 
    int myHeigh = 0; 
    int numBoxesX = 0; 
    int numBoxesY = 0; 

    private final int boxWidth = 30; 
    private final int boxHeight = 30; 

    ImageView(Context c) { 
     super(c); 
     context = c; 
    } 
} 

Nella classe, si ignora la funzione onSizeChange

@Override 
protected void onSizeChanged (int w, int h, int oldw, int oldh) { 
    super.onSizeChanged(w, h, oldw, oldh); 
    myWidth = w; 
    myHeight = h; 
    // Set up other things that you work out from the width and height here, such as 

    numBoxesX = myWidth/boxWidth; 
    numBoxesY = myHeight/boxHeight; 
} 

Su quindi creare una funzione per disegnare la casella:

public void drawSubBox(int x, int y, ...) { 
    // Fail silently if the box being drawn doesn't exist ... 
    if ((x<0) || (x>=numBoxesX)) return; 
    if ((y<0) || (y>=numBoxesY)) return; 

    // Your code to draw the box on the screen ... 
} 

una volta che avete cr mangiato questa vista, puoi aggiungerla a un layout e accedere alle funzioni come qualsiasi altra vista, incluse quelle che aggiungi per definire la dimensione delle sottocaselle ecc ecc. Quindi nella classe per l'attività con questo layout

MyImageView miv; 

miv = topView.findViewById("idforMyImageViewSetInLayoutXMLfile"); 

miv.drawSubBox(0,0, ...); 
1

Come scoprire le dimensioni in pixel dello schermo penso che tu abbia ragione. heightPixels e widthPixels ti daranno il absolute pixel dimensions dello schermo che stai utilizzando. Solo qualcosa su cui essere consapevole: sarei preoccupato di usare px come misura base poiché i risultati cambieranno depending on the density of the screen. Sembra un'idea molto più sicura usare dp e dopo aver trovato il numero assoluto di pixel sullo schermo, facendo scattare quel numero dallo dpi in modo che i rettangoli disegnino lo stesso su ogni telefono. Anche il valore di pixel assoluto non rappresenta lo spazio libero effettivo solo il numero totale di pixel.

Oerwise Non so che la matematica si risolva in modo che questo layout si adatti perfettamente allo schermo. x = 1205/30 = 40.166667. Collegando quel numero in (x-1)*30 = 1,175. Supponendo che la direzione x sul tuo telefono includa effettivamente 1205px (@JRowan - potrebbe essere orizzontale) aggiungendo 30px sembrerebbe che questi rettangoli si adattino allo schermo. Tuttavia, questo funziona solo se non c'è nessun boarder o offset tra uno qualsiasi dei rettangoli.Usando i numeri che hai fornito, c'è solo 4.8px di margine sulla larghezza di 1205 px dello schermo. Con 40 rettilinei in quello spazio, anche un sottile pensionato spingerebbe il disegno fuori dallo schermo.

1

Ho appena risolto il problema mentre mi chiedevo dei margini.

Il tasto è la barra del titolo, che è parte effettiva della schermata dell'applicazione, ma fuori dalla schermata di disegno.

Se cancello la barra del titolo funziona perfettamente.

getWindow().requestFeature(Window.FEATURE_NO_TITLE);

Ho trascorso due giorni con questo e trovato la risposta proprio ora sta facendo la domanda corretta. Lascio qui i link ai post dove l'ho trovato.

How to increase the size of the title bar in an Android application?

Height of status bar in Android

Grazie per le risposte.

+0

Nice - Ho appena pensato che il valore di pixle restituito fosse l'area di disegno dello schermo. Buona scoperta – Rarw

-2

Se la griglia è in un frammento, il problema è ottenere la dimensione dello schermo utilizzabile prima che la vista del frammento venga gonfiata. In uno scenario simile, ho ottenuto la larghezza e l'altezza del contenitore di frammenti nell'attività di hosting e li ho passati come parametri al frammento con la griglia

Problemi correlati