Расширение MediaController для Android - PullRequest
5 голосов
/ 25 октября 2011

Я использую VideoView и MediaController для приложения, над которым я работаю. Я просто хотел, чтобы MediaController появился поверх моего VideoView, но, очевидно, вы не можете сделать это очень легко. Я попытался использовать метод setAnchorView для моего VideoView идентификатора, но это не сработало. Неважно, что я делаю, MediaController всегда внизу моего экрана.

С учетом сказанного я провел некоторое исследование, и похоже, что я продолжаю расширять MediaController, я могу изменить положение и другие свойства. Я создал новый класс:

package com.dop.mobilevforum;

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

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

и в моем родительском классе:

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

Если вышеупомянутое работает, мой MediaController по умолчанию все еще всплывает и имеет все те же функции. Теперь вопрос в том, как мне на самом деле переставить контроллер изнутри моего VFPlayer класса?

enter image description here

Ответы [ 3 ]

17 голосов
/ 27 октября 2011

Предпочтительным способом управления местоположением MediaController является setAnchorView .К сожалению, VideoView, кажется, переопределяет это значение, чтобы быть родительским представлением при загрузке нового видео.Чтобы противодействовать этому, класс, подобный следующему, должен работать

public class ConstantAnchorMediaController extends MediaController
{

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

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

. После того, как вы это сделаете, вы можете использовать этот MediaController, чтобы установить привязку на любое желаемое представление, не беспокоясь о том, что ваш VideoView изменит его.После этого просто нужно получить представление в правильном месте, чтобы закрепить его тоже.

1 голос
/ 27 октября 2011

Что я узнал несколько месяцев назад об Android, так это:

Когда придут трудности, создайте свои собственные компоненты .

Что я имею в виду, это легко сделать макет компонентов шириной 4 или пять кнопок / кнопок ImageButtons и связать их с функциями компонента VideoView (или SurfaceView для лучшего контроля).

Некоторые функции VideoView (извлечены из здесь ):

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

Затем вы можете сделать макет с помощью кнопок, чтобы расположить их там, где вы хотите, без проблем с расширением жесткого компонента, такого как V.

1 голос
/ 27 октября 2011

Вы должны иметь возможность переопределить метод

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

в вашем классе VFPlayer.Отсюда поместите вид / виджет, где вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...