Как отобразить текст под воспроизведением видео в Android? - PullRequest
0 голосов
/ 03 февраля 2011

Я разрабатываю приложение, в котором я использовал VideoView для воспроизведения видео.Что мне нужно, так это то, что мне нужно отобразить какой-то текст под воспроизводимым видео, и текст должен меняться по мере воспроизведения видео, которое я имею в виду в зависимости от прошедшего времени.Нравится СТО.Итак, как получить истекшее время видео в Android?И когда мы приостанавливаем видео, соответствующий текст должен быть также приостановлен, и после этого, когда мы возобновляем видео, должен отображаться текст и следующий текст.*

Спасибо.

1 Ответ

3 голосов
/ 03 февраля 2011

Разве это не VideoView's getCurrentPosition(), что вы ищете?

Чтобы изменить содержимое вашего TextView (или того, что вы хотите использовать), я бы установил таймер с достаточной частотой для обновленияваш "субтитр".Его TimerTask может получить время воспроизведения с помощью этого getCurrentPosition () и использовать карту для хранения значений сообщений и времени в качестве ключа.

Вот это и пример того, о чем я думаю:

00 - «Видео начинается!»
05 - «что-то смешное происходит»
12 - «Видео заканчивается!»

class MySubtitlePoster extends TimerTask{
    private VideoView video;
    private TreeMap <Integer, String> messages; // populate it somewhere

    public MySubtitlePoster(VideoView v) {
        video = v;
    }

    public void run() {
        int videoPos = video.getCurrentPosition();
        String messageToDisplay = messages.floorKey(new Integer(videoPos));
        // If all this is right, now you can get the message and post it, probably using a Handler
    }
}

=========================================

После просмотра вашего полного кода я могу дать вам более подробные советы, но программирование - это ваша работа, поэтому...

Для создания карты:

messages = new TreeMap();
messages.put(new Integer(0), getString(R.string.one));
messages.put(new Integer(20), getString(R.string.two));
...
messages.put(new Integer(62), getString(R.string.four));

Для выполнения работы:

public void doWork(){
    runOnUiThread(new Runnable() {
        public void run() {
            try{
                mText = (TextView)findViewById(R.id.SetText);
                //If it returns  milliseconds, divide by 1000
                int playTime = mVideoView.getCurrentPosition();  
                String textValue = messages.ceilingEntry(new Integer(playtime)).getValue();
                mText.setText(textValue);
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

И, наконец, вместо этого используйте Таймер об этом ( Здесь есть статья о таймерах и пользовательском интерфейсе ):

public void run() 
{
    while(!Thread.currentThread().isInterrupted())
    {
        try 
        {
            doWork();
            Thread.sleep(1000);
        }catch (InterruptedException e) 
        {
            Thread.currentThread().interrupt();
            e.printStackTrace();
        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

Это действительно уродливо и неэффективно.

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

С уважением, Мануэль.

...