2012-03-14 2 views
0

Мне нужен видеоэкран и под видеоиграми, я хочу показать две строки текста, как показано ниже.Видео Blackberry с текстовым дисплеем

model view

Для этого я использую следующий код.

public final class PlayVideoScreen extends MainScreen { 
    private Player player; 
    private VideoControl videoControl; 

    public PlayVideoScreen() { 

     // ms.setTitle(new LabelField("Let's play some video...")); 
     LabelField lf = new LabelField("Video Play"); 

     try { 
      // Create a new Player pointing to the video file. 
      // This can use any valid URL. 
      player = javax.microedition.media.Manager 
        .createPlayer("file:///SDCard/BlackBerry/videos/sample.avi"); 

      player.realize(); 

      // Create a new VideoControl. 
      videoControl = (VideoControl) player.getControl("VideoControl"); 
      // Initialize the video mode using a Field. 
      Field videoField = (Field) videoControl.initDisplayMode(
        VideoControl.USE_GUI_PRIMITIVE, 
        "net.rim.device.api.ui.Field"); 

      add(videoField); 

      VolumeControl volume = (VolumeControl) player 
        .getControl("VolumeControl"); 
      volume.setLevel(30); 


      player.start(); 

      // Set the video control to be visible. 
      // videoControl.setVisible(true); 
     } catch (MediaException me) { 
      Dialog.alert(me.toString()); 
     } catch (IOException ioe) { 
      Dialog.alert(ioe.toString()); 
     } 

     add(lf); 

     LabelField lf2 = new LabelField("How r you?"); 

     add(lf2); 
    } 

    public boolean onClose() { 
     // Clean up the player resources. 
     player.close(); 
     videoControl.setVisible(false); 
     close(); 
     return true; 
    } 
} 

Теперь то, что может быть высотой видео, вид принимает свиток и текст виден только после прокрутки. Я использую устройство размером 320х240 пикселей. Я даже тестирую видео с разрешением 320X150 пикселей. Но текст не просматривается без прокрутки, хотя есть много свободного места над и снизу видео. Что такое проблема в моем коде? Как его решить?

ответ

1

Существует несколько способов решения вашей проблемы. Самый простой в вашем случае - использовать MainScreen#setStatus, который устанавливает содержимое раздела статуса этого экрана.

Вместо добавления LabelField s непосредственно, добавьте их следующим образом:

VerticalFieldManager vfm = new VerticalFieldManager(); 
vfm.add(lf); 
vfm.add(lf2); 
setStatus(vfm); 


EDIT: Альтернативным решением было бы макет и позиционирует поле ребенка самостоятельно. Для этого вы можете переопределить sublayout() PlayVideoScreen или ввести другого менеджера (VerticalFieldManager), добавить к нему все поля (видео и ярлыки) и переопределить его метод sublayout().

Ниже код с вышеупомянутыми изменениями

public PlayVideoScreen() { 
    super(NO_VERTICAL_SCROLL); 

    // ms.setTitle(new LabelField("Let's play some video...")); 
    final LabelField lf = new LabelField("Video Play"); 

    try { 
     // Create a new Player pointing to the video file. 
     // This can use any valid URL. 
     player = javax.microedition.media.Manager 
       .createPlayer("file:///SDCard/BlackBerry/videos/sample.avi"); 

     player.realize(); 

     // Create a new VideoControl. 
     videoControl = (VideoControl) player.getControl("VideoControl"); 
     // Initialize the video mode using a Field. 
     final Field videoField = (Field) videoControl.initDisplayMode(
      VideoControl.USE_GUI_PRIMITIVE, 
      "net.rim.device.api.ui.Field"); 

      VolumeControl volume = (VolumeControl) player 
        .getControl("VolumeControl"); 
     volume.setLevel(30); 

     player.start(); 

     // Set the video control to be visible. 
     // videoControl.setVisible(true); 

     final LabelField lf2 = new LabelField("How r you?"); 

     VerticalFieldManager vfm = new VerticalFieldManager(NO_VERTICAL_SCROLL) { 
      protected void sublayout(int maxWidth, int maxHeight) { 
       int heightLeft = maxHeight; 

       // layout the children fields 
       layoutChild(lf, maxWidth, heightLeft); 
       heightLeft -= lf.getHeight(); 

       layoutChild(lf2, maxWidth, heightLeft); 
       heightLeft -= lf2.getHeight(); 

       layoutChild(videoField, maxWidth, heightLeft); 

       // position the children fields 
       int yPos = 0; 
       setPositionChild(videoField, 0, yPos); 
       yPos += videoField.getHeight(); 

       setPositionChild(lf, 0, yPos); 
       yPos += lf.getHeight(); 

       setPositionChild(lf2, 0, yPos); 

       setExtent(maxWidth, maxHeight); 
      }; 
     }; 
     vfm.add(videoField); 
     vfm.add(lf); 
     vfm.add(lf2); 

     add(vfm); 

    } catch (MediaException me) { 
     Dialog.alert(me.toString()); 
    } catch (IOException ioe) { 
     Dialog.alert(ioe.toString()); 
    } 
} 
+0

Я попробовал ваш путь. Теперь видео и метка отображаются одновременно, но видео не видно, отображается только белый блок, а звук воспроизводится в фоновом режиме. Как только я прокручиваю вверх, и ярлык выходит из экрана, видео становится видимым, т. Е. Когда метка присутствует на экране, видео перестает двигаться. –

+0

@dalandroid Проверить обновленный ответ – mrvincenzo

Смежные вопросы