2011-07-14 10 views

答えて

1

これが起こると、BB UIフレームワークは画面に対して確定的にlayout(int width, int height)を呼び出します。 MainScreenManagerであるため、BB UIフレームワークが描画を開始する前に、すべての子フィールドをレイアウトする必要があります。

したがって、layout()では、現在の方向の状態(net.rim.device.api.system.Display.getOrientation())を追跡し、前の状態と比較することができます。変更された場合、デバイスは回転したばかりです。

+0

上に滑らせる。しかし、我々は、MainScreenでレイアウト()関数をオーバーライドすることができませんでした。 BB devサイトでは、次のように述べています。タッチスクリーンの向きが変わったときに通知を受け取るnet.rim.device.api.ui.Managerクラスをインポートします。 net.rim.device.api.ui.Manager.sublayout(int、int)をオーバーライドします。保護されたボイドのサブレイアウト(int幅、int高さ){.. 私はしたが、私は画面を回転させると、シミュレータはコードに実行されませんでした。私はこれがシミュレータの問題か何かではありません。 とにかくありがとうございます。 –

+1

Torch 9800は、スライダが開いているか閉じているかによって動作が異なる場合があります。おそらく、開いた/閉じたスライダの両方で試してみてください。 –

0

私はArhimedによって提案された方法とは異なる方法を考え出しました。これはうまくいくようです(デバイスを傾けたときに別の方法でカスタムフィールドを描くために使用します)。私はこの方法

protected void myOrientation() { 
    // portrait is true when dh > dw 
    boolean portrait = (Display.getOrientation() == Display.ORIENTATION_PORTRAIT); 
    // dw and dh = real horizontal and vertical dimensions of display - regardless of device orientation 
    int dw = portrait ? Math.min(Display.getWidth(), Display.getHeight()) : Math.max(Display.getWidth(), Display.getHeight()); 
    int dh = portrait ? Math.max(Display.getWidth(), Display.getHeight()) : Math.min(Display.getWidth(), Display.getHeight()); 

    // here I draw my custom Field 

    invalidate(); 
} 

を持っており、コンストラクタで、それがすべての加速度センサーイベントで呼び出され、その後、一度それを呼び出す:

public class MyScreen extends MainScreen implements AccelerometerListener { 

private MyScreen() { 
    if (AccelerometerSensor.isSupported()) { 
     orientationChannel = AccelerometerSensor.openOrientationDataChannel(Application.getApplication()); 
     orientationChannel.addAccelerometerListener(this); 
    } 
    .... 
} 


public void onData(AccelerometerData accData) { 
    if (old != accData.getOrientation()) { 
     myField.myOrientation(); 
    } 
} 

を多分これは、あなたとイエスができます - 場合は、あなたがチェックする必要がありますキーボードはトーチ

よろしく アレックス

関連する問題