2011-08-17 6 views
2

私はseekmark.markPlace()を実行できるリスナーを探していました。この関数は、私のレイアウトで定義されたseekBarの寸法とパディングを取ります。関数をonCreateから呼び出すと、seekBarの値が0になります。私はonCreateの外で関数を呼び出すことができるリスナーが必要です。この関数は、画面が回転している(レイアウトランドが作成されている)場合にのみ実行する必要があります。リスナーを作成するonRotate()

public class seekMark { 
    private int seekLength;  // in pixels 
    private int seekLeftPad; // in pixels 
    private int seekBottomPad; // in pixels 
    private int trackLength; // in ms 

    public seekMark(){ 
     seekLength = progressBar.getWidth(); 
     seekLeftPad = progressBar.getPaddingLeft(); 
     seekBottomPad = progressBar.getPaddingBottom(); 
     trackLength = player.getDuration(); 
    } 

    private int pxPerMs(){ 
     return (seekLength/trackLength); 
    } 

    public void markPlace() throws XmlPullParserException, IOException { 
     Drawable marker = context.getResources().getDrawable(R.drawable.audio); 
     int y = seekBottomPad; 
     int x = 0; 
     int w = marker.getIntrinsicWidth(); 
     int h = marker.getIntrinsicHeight(); 
     int[] bmPos = markPxList(); // returns a list of px (from the left) read from a xml database 

     for(int i = 0; i <= bmPos.length; i++){ 
      x = bmPos[i] + seekLeftPad; 
      marker.setBounds(x, y, x + w, y + h); 
      marker.draw(canvas); 
     } 

    } 

} 

onRotate()などの独自のリスナーを作成することはできますか?

答えて

0

デバイスが回転しているときにonCreateが呼び出されるため、専用変数を使用してディスプレイの向きを保存するだけではどうでしょうか。たびのonCreate()が呼び出されると、あなたは、表示方向が変更されたかどうかを確認するために比較することができます:

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); 
int rotation = display.getRotation(); 

if(rotation != mPreviousRotation) { 
    mPreviousRotation = rotation; 

    // Insert code for handling rotation here 
} 

私はのonCreateの最初の呼び出し時にmPreviousRotation変数の初期化の処理方法を決定するためにあなたにそれを残しておきます()。

+0

私はそれを試みました。問題は、onCreateがprogressBarを作成するところです。したがって、それはまだ存在せず、seekLength、seekLeftPad、およびseekBottomPadの値はゼロです。 –

+0

おそらく、あなたが達成しようとしていることを説明すると助けになるでしょう。あなたは、回転の前にシークマーク位置をその位置に合わせるように設定しようとしていますか? – glorifiedHacker

+0

イメージをプログレスバーに配置しようとしています。今、ボタンを押したときにseekmark.markPlace()関数を実行することによって、seekmark.markPlace()関数をテストしています。私は "Drawable marker = context.getResources()。getDrawable(R.drawable.audio);"という問題に遭遇しました。プログラムを実行するたびにプログラムがクラッシュします。 –