2012-10-26 9 views
5

Sto cercando di avere una vista surfaceview (una classe personalizzata che estende la vista superficiale) che aggiungo nel layout xml per avere un rapporto di dimensioni fisse: 4: 3 (dalla lunghezza alla larghezza).Android: come posso impostare la mia vista surreale personalizzata su un rapporto di dimensioni fisse in xml?

Voglio riempirlo il più possibile del suo genitore, sia sulla lunghezza che sulla larghezza, ma una volta raggiunta l'intera lunghezza o larghezza regolerà l'altro lato per avere un rapporto di dimensioni fisse come ho detto prima.

Come posso ottenere una cosa del genere?

Grazie.

+0

Preferisco invece farlo nel layout xml e successivamente leggere la risoluzione fornita dalla classe. –

risposta

5

Nel metodo onCreate dell'attività è possibile leggere la risoluzione dello schermo e impostare la larghezza e l'altezza del layout.

Esempio supponendo che stai usando RealtiveLayout:

private void create43RatioSurface() { 
    SurfaceView surfaceView43 = (SurfaceView)findViewById(R.id.surfaceView1); 

    DisplayMetrics metrics = getResources().getDisplayMetrics(); 
    int height = 0; 
    int width = 0; 

    if(metrics.widthPixels < metrics.heightPixels){ 
     width = metrics.widthPixels; 
     height= (metrics.widthPixels/4) * 3 ; 
    } else { 
     height= metrics.heightPixels; 
     width= (metrics.heightPixels/4) * 3 ; 
    } 

    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(width, height); 
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); 
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 

    surfaceView43.setLayoutParams(layoutParams);   
} 
+0

È facile farlo in modo dinamico, ma sto cercando di farlo in xml, e una volta che ha già le sue dimensioni, troverò il rapporto di scala e disegnerò tutto nella tela di conseguenza –

+0

Ok, scusa ho frainteso il tuo domanda. Vuoi una soluzione solo XML ... –

2

Questo potrebbe essere una specie di hacky ma si potrebbe forse mettere un ImageView vuota come una sorta di cornice per la SurfaceView. Ora per spiegare la follia

1) Creare un asset immagine che si adatti alla proporzione desiderata è tutto trasparente. Consente di chiamare la nostra immagine fantasma tis (probabilmente meglio per renderlo invisibile così)

2) utilizzare un layout relativo e posizionare l'imageview nel layout relativo con match_parent per l'altezza e la larghezza e l'utilizzo di scaletype CENTER_INSIDE o CENTER_CROP se si è andato van Gocha e creato un asset massiccia

3) aggiungere il superficie vista al layout dopo l'ImageView e AlignTop/basso/a destra/sinistra con la visualizzazione dell'immagine

non ho provato Questo implementazione ma dovrebbe darti il ​​rapporto che vuoi per qualunque schermo tu abbia.

+2

sembra abbastanza folle da poter funzionare! :) fammi provare –

+0

@DanielMendel, ha fatto questo lavoro? –

Problemi correlati