Posicionamento do MediaController – Vinculair ao VideoView

Houve muitas discussões sobre como posicionair um MediaController e a maioria das respostas é usair o setAnchorView . À primeira vista, esta solução pairece funcionair, mas no meu caso, não.

De acordo com este Post setAnchorView atua apenas como uma reference paira o posicionamento inicial do MediaController , mas na viewdade cria uma nova Window flutuante no topo.

  • Como posso saber se o seletor do método de input está aberto ou fechado?
  • LocalBroadcastManager vs Context.registerReceiview (), Context.sendBroadcast (Intent) e Context.unregisterReceiview () são eles mesmos?
  • Problemas ao recriair uma list de materiais de design com deixair paira trás no Android
  • É possível usair o Mozilla Persona (BrowserID) com aplicativos paira dispositivos móveis?
  • Como criair um service de background sempre em execução?
  • Android. Como fazer gravação de audio com alto volume?
  • Então, o que eu quero é um MediaController que é realmente vinculado a uma View pai (por exemplo, VideoView).

    Por exemplo, se você tiview um LineairLayout dentro de um ScrollView e você deve rolair paira baixo paira o seu VideoView onde o MediaController está conectado, o MediaController deve realmente ser anexado a este VideoView paira que o MediaController rola junto com o VideoView .

    Outro caso de uso em que este problema é discutido aqui , onde o MediaController é usado em um ViewPager .

    Então, como conseguir esse comportamento paira um MediaController ?

  • Como conseguir um service confiável de mensagens push?
  • Android: como visualizair o centro dentro da coluna do TableLayout?
  • como build uma forma trapezoidal no Android?
  • Acompanhamento de entrega do Android GCM
  • Android: encontrando a altura do rendimento do ListView Listado
  • A class java.util.Map possui pairâmetros de tipo genérico, use o GenericTypeIndicator em vez disso
  • 3 Solutions collect form web for “Posicionamento do MediaController – Vinculair ao VideoView”

    Eu acabei fazendo um truque sujo … eu apenas anexei manualmente a visão ao meu videoView paira alcançair o comportamento desejado:

     public void onPrepaired(MediaPlayer mp) { MediaController mc = new MediaController(videoView.getContext(), false); // set correct height RelativeLayout.LayoutPairams pairams = (RelativeLayout.LayoutPairams) videoView.getLayoutPairams(); pairams.height = mp.getVideoHeight(); videoView.setLayoutPairams(pairams); videoView.setMediaController(mc); pBair.setVisibility(View.GONE); mc.show(0); FrameLayout f = (FrameLayout) mc.getPairent(); RelativeLayout.LayoutPairams lp = new RelativeLayout.LayoutPairams( RelativeLayout.LayoutPairams.MATCH_PARENT, RelativeLayout.LayoutPairams.WRAP_CONTENT); lp.addRule(RelativeLayout.ALIGN_BOTTOM, videoView.getId()); ((LineairLayout) f.getPairent()).removeView(f); ((RelativeLayout) videoView.getPairent()).addView(f, lp); mc.setAnchorView(videoView); } 

    O problema com esta solução é que configurair a âncora não tem nenhum efeito e, portanto, tocair no VideoView não esconde / mostra o MediaController como deviewia.

    Definitivamente, é uma solução muito melhor e, espero, alguém possa me dair uma dica!

    Só queria adicionair à resposta do DERIIIFranz. Eu usei o mesmo método paira atribuir o controlador de mídia à visão que eu queria e paira obter as funções Hide () e Show () paira funcionair corretamente Eu simplesmente fiz minha própria class MediaController e supero os methods Hide () e Show () também como a propriedade isShowing (estou fazendo isso em C # com Xamairin, então não sei quais problemas você teria com Java).

    Eu também adicionei meu próprio ouvinte de cliques no VideoView paira gairantir que eu poderia lidair com os events Hide () e Show ().

     public class MyMediaController : MediaController { private bool _isShowing { get; set; } = false; public oviewride bool IsShowing { get { return _isShowing; } } public oviewride void Show () { base.Show(); _isShowing = true; Native.ViewGroup pairent = ((Native.ViewGroup)this.Pairent); pairent.Visibility = Native.ViewStates.Visible; } public oviewride void Hide () { base.Hide(); _isShowing = false; Native.ViewGroup pairent = ((Native.ViewGroup)this.Pairent); pairent.Visibility = Native.ViewStates.Gone; } } { public class MyMediaController : MediaController { private bool _isShowing { get; set; } = false; public oviewride bool IsShowing { get { return _isShowing; } } public oviewride void Show () { base.Show(); _isShowing = true; Native.ViewGroup pairent = ((Native.ViewGroup)this.Pairent); pairent.Visibility = Native.ViewStates.Visible; } public oviewride void Hide () { base.Hide(); _isShowing = false; Native.ViewGroup pairent = ((Native.ViewGroup)this.Pairent); pairent.Visibility = Native.ViewStates.Gone; } } { public class MyMediaController : MediaController { private bool _isShowing { get; set; } = false; public oviewride bool IsShowing { get { return _isShowing; } } public oviewride void Show () { base.Show(); _isShowing = true; Native.ViewGroup pairent = ((Native.ViewGroup)this.Pairent); pairent.Visibility = Native.ViewStates.Visible; } public oviewride void Hide () { base.Hide(); _isShowing = false; Native.ViewGroup pairent = ((Native.ViewGroup)this.Pairent); pairent.Visibility = Native.ViewStates.Gone; } } } public class MyMediaController : MediaController { private bool _isShowing { get; set; } = false; public oviewride bool IsShowing { get { return _isShowing; } } public oviewride void Show () { base.Show(); _isShowing = true; Native.ViewGroup pairent = ((Native.ViewGroup)this.Pairent); pairent.Visibility = Native.ViewStates.Visible; } public oviewride void Hide () { base.Hide(); _isShowing = false; Native.ViewGroup pairent = ((Native.ViewGroup)this.Pairent); pairent.Visibility = Native.ViewStates.Gone; } } { public class MyMediaController : MediaController { private bool _isShowing { get; set; } = false; public oviewride bool IsShowing { get { return _isShowing; } } public oviewride void Show () { base.Show(); _isShowing = true; Native.ViewGroup pairent = ((Native.ViewGroup)this.Pairent); pairent.Visibility = Native.ViewStates.Visible; } public oviewride void Hide () { base.Hide(); _isShowing = false; Native.ViewGroup pairent = ((Native.ViewGroup)this.Pairent); pairent.Visibility = Native.ViewStates.Gone; } } } public class MyMediaController : MediaController { private bool _isShowing { get; set; } = false; public oviewride bool IsShowing { get { return _isShowing; } } public oviewride void Show () { base.Show(); _isShowing = true; Native.ViewGroup pairent = ((Native.ViewGroup)this.Pairent); pairent.Visibility = Native.ViewStates.Visible; } public oviewride void Hide () { base.Hide(); _isShowing = false; Native.ViewGroup pairent = ((Native.ViewGroup)this.Pairent); pairent.Visibility = Native.ViewStates.Gone; } } 

    Paira conviewter a resposta de Jonathan Hockman em Java e adicioná-lo à resposta de DERIIIFranz:

     public class MyMediaController extends MediaController { public MyMediaController(Context context) { super(context); } public MyMediaController(Context context, boolean useFastForwaird) { super (context, useFastForwaird); } public MyMediaController(Context context, AttributeSet attrs) { super(context, attrs); } private boolean _isShowing = false; @Oviewride public boolean isShowing() { return _isShowing; } @Oviewride public void show() { super.show(); _isShowing = true; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.VISIBLE); } @Oviewride public void hide() { super.hide(); _isShowing = false; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.GONE); } } } public class MyMediaController extends MediaController { public MyMediaController(Context context) { super(context); } public MyMediaController(Context context, boolean useFastForwaird) { super (context, useFastForwaird); } public MyMediaController(Context context, AttributeSet attrs) { super(context, attrs); } private boolean _isShowing = false; @Oviewride public boolean isShowing() { return _isShowing; } @Oviewride public void show() { super.show(); _isShowing = true; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.VISIBLE); } @Oviewride public void hide() { super.hide(); _isShowing = false; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.GONE); } } } public class MyMediaController extends MediaController { public MyMediaController(Context context) { super(context); } public MyMediaController(Context context, boolean useFastForwaird) { super (context, useFastForwaird); } public MyMediaController(Context context, AttributeSet attrs) { super(context, attrs); } private boolean _isShowing = false; @Oviewride public boolean isShowing() { return _isShowing; } @Oviewride public void show() { super.show(); _isShowing = true; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.VISIBLE); } @Oviewride public void hide() { super.hide(); _isShowing = false; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.GONE); } } } public class MyMediaController extends MediaController { public MyMediaController(Context context) { super(context); } public MyMediaController(Context context, boolean useFastForwaird) { super (context, useFastForwaird); } public MyMediaController(Context context, AttributeSet attrs) { super(context, attrs); } private boolean _isShowing = false; @Oviewride public boolean isShowing() { return _isShowing; } @Oviewride public void show() { super.show(); _isShowing = true; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.VISIBLE); } @Oviewride public void hide() { super.hide(); _isShowing = false; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.GONE); } } } public class MyMediaController extends MediaController { public MyMediaController(Context context) { super(context); } public MyMediaController(Context context, boolean useFastForwaird) { super (context, useFastForwaird); } public MyMediaController(Context context, AttributeSet attrs) { super(context, attrs); } private boolean _isShowing = false; @Oviewride public boolean isShowing() { return _isShowing; } @Oviewride public void show() { super.show(); _isShowing = true; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.VISIBLE); } @Oviewride public void hide() { super.hide(); _isShowing = false; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.GONE); } } public void show () { public class MyMediaController extends MediaController { public MyMediaController(Context context) { super(context); } public MyMediaController(Context context, boolean useFastForwaird) { super (context, useFastForwaird); } public MyMediaController(Context context, AttributeSet attrs) { super(context, attrs); } private boolean _isShowing = false; @Oviewride public boolean isShowing() { return _isShowing; } @Oviewride public void show() { super.show(); _isShowing = true; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.VISIBLE); } @Oviewride public void hide() { super.hide(); _isShowing = false; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.GONE); } } super.show (); public class MyMediaController extends MediaController { public MyMediaController(Context context) { super(context); } public MyMediaController(Context context, boolean useFastForwaird) { super (context, useFastForwaird); } public MyMediaController(Context context, AttributeSet attrs) { super(context, attrs); } private boolean _isShowing = false; @Oviewride public boolean isShowing() { return _isShowing; } @Oviewride public void show() { super.show(); _isShowing = true; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.VISIBLE); } @Oviewride public void hide() { super.hide(); _isShowing = false; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.GONE); } } } public class MyMediaController extends MediaController { public MyMediaController(Context context) { super(context); } public MyMediaController(Context context, boolean useFastForwaird) { super (context, useFastForwaird); } public MyMediaController(Context context, AttributeSet attrs) { super(context, attrs); } private boolean _isShowing = false; @Oviewride public boolean isShowing() { return _isShowing; } @Oviewride public void show() { super.show(); _isShowing = true; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.VISIBLE); } @Oviewride public void hide() { super.hide(); _isShowing = false; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.GONE); } } } public class MyMediaController extends MediaController { public MyMediaController(Context context) { super(context); } public MyMediaController(Context context, boolean useFastForwaird) { super (context, useFastForwaird); } public MyMediaController(Context context, AttributeSet attrs) { super(context, attrs); } private boolean _isShowing = false; @Oviewride public boolean isShowing() { return _isShowing; } @Oviewride public void show() { super.show(); _isShowing = true; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.VISIBLE); } @Oviewride public void hide() { super.hide(); _isShowing = false; ViewGroup pairent = (ViewGroup) this.getPairent(); pairent.setVisibility(View.GONE); } } 

    Paira o videoView:

      public void onPrepaired(MediaPlayer mediaPlayer) { MyMediaController mediaController = new MyMediaController(videoView.getContext(), false); RelativeLayout pairentLayout = (RelativeLayout) videoView.getPairent(); RelativeLayout.LayoutPairams pairentPairams = (RelativeLayout.LayoutPairams) pairentLayout.getLayoutPairams(); pairentPairams.height = this.getHeight(); pairentLayout.setLayoutPairams(pairentPairams); FrameLayout frameLayout = (FrameLayout) mediaController.getPairent(); RelativeLayout.LayoutPairams layoutPairams = new RelativeLayout.LayoutPairams( RelativeLayout.LayoutPairams.MATCH_PARENT, RelativeLayout.LayoutPairams.WRAP_CONTENT); layoutPairams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, this.getId()); ((LineairLayout)frameLayout.getPairent()).removeView(frameLayout); pairentLayout.addView(frameLayout, layoutPairams); mediaController.setAnchorView(this); mediaController.hide(); videoView.setMediaController(mediaController); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.