HScene間の重ね合わせ制御

指定したHSceneを最前面に表示するHScene.show()メソッドのサンプルコード。
本サンプルでは、一部が重なり合った2つのHSceneが交互に最前面に表示される。

 

なお、本サンプルを動作させるためには、BD-J Object fileに本サンプルを2つ登録し、それぞれ奇数、偶数のapplication_idを割り振る必要がある。

 

Main.java

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
 
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
 
import org.havi.ui.HScene;
import org.havi.ui.HSceneFactory;
import org.havi.ui.HSceneTemplate;
 
public class Main extends Component implements Xlet{
    int x, y, w = 960, h = 540;
    int count = 0;
    int appID;
    public void initXlet(XletContext xc){
        try {
            appID = Integer.parseInt[1]String) xc.getXletProperty("dvb.app.id"), 16);
            if( ( appID%2 ) == 0 ){  // application_idに応じて表示位置をずらしている
                x = 480-240; y = 270-135;
           … Continue reading;
            hs.add(this);
            if( ( appID%2 ) == 0 ){ // application_idに応じて開始タイミングをずらしている
                Thread.sleep(1000);
            }
            hs.setVisible(true);
            for( ;; ){
                hs.show(); // 自アプリのHSceneを最前面にしてrepaint
                // hs.repaint();
                count++;
                Thread.sleep(2000);
            }
        } catch (Throwable thr){
        }
    }
    public void paint(Graphics g ){
        if( ( appID%2 ) == 0 ){
            g.setColor(Color.blue);
        } else {
            g.setColor(Color.red);
        }
         g.fillRect(0, 0, w, h);
         g.setColor(Color.white);
         g.setFont(new Font(null, Font.BOLD, 48));
         g.drawString(Integer.toString(count), 100, 100);
         g.drawString(Integer.toString(count), w-100, h-100);
    }
    public void startXlet(){}
    public void pauseXlet(){}
    public void destroyXlet(boolean unconditional){}
}

関連する項目

References
1 String) xc.getXletProperty("dvb.app.id"), 16); if( ( appID%2 ) == 0 ){ // application_idに応じて表示位置をずらしている x = 480-240; y = 270-135; } else { x = 960-240; y = 540-135; } // HSceneを取得 HSceneFactory hsf= HSceneFactory.getInstance(); HSceneTemplate hst = new HSceneTemplate(); hst.setPreference(HSceneTemplate.SCENE_PIXEL_DIMENSION, new Dimension(w, h), HSceneTemplate.REQUIRED); hst.setPreference(HSceneTemplate.SCENE_PIXEL_LOCATION, new Point(x, y), HSceneTemplate.REQUIRED); HScene hs = hsf.getBestScene(hst); this.setBounds(new Rectangle(0,0,w,h

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください