2011-10-24 14 views
5

Sono nuovo di java così nudo con me. Sto utilizzando uno VideoView e lo MediaController per un'app a cui sto lavorando. Volevo semplicemente che lo MediaController appaia sopra al mio VideoView ma a quanto pare non è possibile farlo molto facilmente. Ho tentato di utilizzare il metodo setAnchorView per il mio ID VideoView, ma non ha funzionato. Non importa quello che faccio, lo MediaController è sempre nella parte inferiore del mio schermo.Estendere MediaController per Android

Con ciò detto, ho fatto qualche ricerca e sembra che vada per estendere MediaController, posso cambiare posizione e altre proprietà. Ho creato una nuova classe:

package com.dop.mobilevforum; 

import android.content.Context; 
import android.widget.MediaController; 

public class VFPlayer extends MediaController 
{ 
    public VFPlayer(Context context) 
    { 
     super(context); 
    } 
} 

e nella mia classe genitore:

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.vforum); 

    controller = new VFPlayer(this); 
    vidPlayer = (VideoView) findViewById(R.id.vidPlayer); 
    vidPlayer.setMediaController(controller); 
} 

E quanto sopra sta lavorando, il mio difetto MediaController apre ancora in piedi e ha tutte le stesse funzionalità. La domanda è ora, come faccio a riposizionare effettivamente il controller dalla mia classe VFPlayer?

enter image description here

+0

ancora bloccato su questo:/ – Ronnie

+0

Io uso [questa soluzione] (http://stackoverflow.com/a/9563643/544419) per modificare la posizione MediaController. Spero che questo ti aiuti. – Rongan

risposta

16

Il modo migliore per controllare la posizione del MediaController è tramite setAnchorView. Sfortunatamente, VideoView sembra sovrascrivere questo valore per essere la vista genitore di se stesso ogni volta che viene caricato un nuovo video. Per contrastare questo atto, una classe come la seguente dovrebbe funzionare

public class ConstantAnchorMediaController extends MediaController 
{ 

    public ConstantAnchorMediaController(Context context, View anchor) 
    { 
     super(context); 
     super.setAnchorView(anchor); 
    } 

    @Override 
    public void setAnchorView(View view) 
    { 
     // Do nothing 
    } 
} 

Una volta fatto questo, è possibile utilizzare questo MediaController per impostare l'ancoraggio a qualsiasi che si desidera visualizzare, senza preoccuparsi di vostro VideoView cambiarlo. Dopodiché, è solo questione di ottenere una vista nel posto giusto per ancorarlo.

+0

Ho provato quello che hai suggerito nel tuo secondo paragrafo.Ho fatto un tuffo 1x1 View e lo misi in cima del mio schermo e provato il metodo setAnchorView a quella e non è finita a lavorare – Ronnie

+0

Cosa è accaduto? Inoltre, per essere sicuro, è necessario creare programmaticamente il tuo MediaController affinché funzioni. Sei stato tu? –

+0

Lo sto creando in modo programmatico. Non è successo niente di diverso Si posiziona proprio sotto il video. Giuro, setAnchorView ha fatto alcuna differenza, non importa quello che ho impostato vista a – Ronnie

1

Si dovrebbe essere in grado di eseguire l'override del metodo

android.view.View.OnLayout(boolean, int, int, int, int) 

nella classe VFPlayer. Da qui metti la vista/widget dove vuoi.

+0

puoi approfondire questo? Se riesco a scavalcare quel metodo nel mio VFPlayer.java, sarebbe bello, ma non ho idea di dove iniziare anche – Ronnie

1

quello che ho imparare qualche mese fa su Android è questo:

Quando difficultys arrivano, fanno i propri componenti.

Ciò che intendo, è facile rendere il layout dei componenti, larghezza 4 o cinque ImageButtons/Buttons e collegarli alle funzioni del componente VideoView (o SurfaceView per un controllo migliore).

Alcune delle funzioni VideoView (estratti da here):

start() -> To start a video play 
pause() -> To pause it 
seekTo(int msec) -> To go the exactly place , using it with a SeekBar 
... 

allora si può fare un po 'di layout con i tasti al fine di metterli dove si vuole, senza i problemi di cercare di estendere un componente rigido come V.