2011-10-24 12 views
5

Soy nuevo en Java tan desnudo conmigo. Estoy usando un VideoView y el MediaController para una aplicación en la que estoy trabajando. Simplemente quería que el MediaController apareciera en la parte superior de mi VideoView, pero aparentemente no se puede hacer eso fácilmente. Intenté utilizar el método setAnchorView en mi id VideoView, pero eso no funcionó. No importa lo que haga, el MediaController siempre está en la parte inferior de mi pantalla.Extienda MediaController para android

Dicho esto, hice una investigación y parece que voy a extender MediaController, puedo cambiar de posición y otras propiedades. He creado una nueva clase:

package com.dop.mobilevforum; 

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

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

y en mi clase padre:

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); 
} 

Se lo anterior está trabajando, mi defecto MediaController todavía se eleva y tiene la misma funcionalidad. La pregunta ahora es, ¿cómo hago para reposicionar el controlador desde mi clase VFPlayer?

enter image description here

+0

sigue atascado en esto:/ – Ronnie

+0

Uso [esta solución] (http://stackoverflow.com/a/9563643/544419) para cambiar la posición de MediaController. Espero que esto te ayude. – Rongan

Respuesta

16

La forma preferida de controlar la ubicación del MediaController es a través de setAnchorView. Desafortunadamente, VideoView parece anular este valor para que sea la vista principal de sí mismo cada vez que se carga un video nuevo. Para actuar contra esto, una clase como la siguiente debería funcionar

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 vez hecho esto, se puede utilizar este MediaController para fijar el ancla a lo que ve que desee sin tener que preocuparse acerca de su VideoView cambiarlo. Después de eso, solo es cuestión de obtener una vista en el lugar correcto para anclarla también.

+0

Intenté lo que sugeriste en tu segundo párrafo.Hice una vista 1x1 dip y la coloqué en la parte superior de mi pantalla y probé el método setAnchorView para eso y no terminó trabajando – Ronnie

+0

¿Qué pasó? Además, para estar seguro, debe crear su MediaController programáticamente para que funcione. ¿Hiciste eso? –

+0

Lo estoy creando programáticamente. No pasó nada diferente. Se posiciona justo debajo del video. Lo juro, setAnchorView no ha supuesto ninguna diferencia, independientemente de la vista que haya configurado en – Ronnie

1

Usted debe ser capaz de reemplazar el método

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

en su clase VFPlayer. Desde aquí ponga la vista/widget donde lo desee.

+0

¿puedes dar más detalles sobre esto? Si puedo anular ese método en mi VFPlayer.java, estaría bien, pero no tengo ni idea de por dónde empezar – Ronnie

1

Lo que he aprender hace unos meses acerca de Android es la siguiente:

Cuando difficultys vienen, haga sus propios componentes.

Lo que quiero decir es que es fácil hacer el diseño de sus componentes, ancho 4 o cinco ImageButtons/Botones, y vincularlos a las funciones del componente VideoView (o SurfaceView para un mejor control).

Algunas de las funciones VideoView (extraídos de here):

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

A continuación, puede hacer algo de diseño con los botones con el fin de ponerlos en la que desea, sin los problemas de tratar de extender un componente rígido como V.

Cuestiones relacionadas