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()などの独自のリスナーを作成することはできますか?
私はそれを試みました。問題は、onCreateがprogressBarを作成するところです。したがって、それはまだ存在せず、seekLength、seekLeftPad、およびseekBottomPadの値はゼロです。 –
おそらく、あなたが達成しようとしていることを説明すると助けになるでしょう。あなたは、回転の前にシークマーク位置をその位置に合わせるように設定しようとしていますか? – glorifiedHacker
イメージをプログレスバーに配置しようとしています。今、ボタンを押したときにseekmark.markPlace()関数を実行することによって、seekmark.markPlace()関数をテストしています。私は "Drawable marker = context.getResources()。getDrawable(R.drawable.audio);"という問題に遭遇しました。プログラムを実行するたびにプログラムがクラッシュします。 –