My Android Tip
- Use at your own risk! lol, ㅋㅋㅋ
내가 작업한 것 중에서 유용한 Tip 들을 정리 해본다.
// ---------------------------------------------
// :: SeekBar
// ---------------------------------------------
- main.xml
android:layout_width="fill_parent"
android:layout_height="wrap_contents"
android:clickable="true"
android:paddingLeft="5px"
android:paddingRight="5px"
android:maxHeight="20px" // this means ProgressiveBar Height
android:max="1000"
android:progress="0"
android:fitsSystemWindows="true"
android:thumb="@drawable/seekbar_thumb"
android:progressDrawable="@drawable/seekbar"
android:secondaryProgress="0">
- seekbar.xml: Change "(" to "<"
(layer-list xmlns:android="http://schemas.android.com/apk/res/android")
(item android:id="@android:id/background")
(clip android:drawable="@drawable/bg" /)
(/item)
/*
(item android:id="@android:id/secondaryProgress")
(clip android:drawable="@drawable/progress2" /)
(/item)
*/
(item android:id="@android:id/progress")
(clip android:drawable="@drawable/progress" /)
(/item)
(/layer-list)
- seekbar_thumb.xml: Change "(" to "<"
(selector xmlns:android="http://schemas.android.com/apk/res/android")
(item android:state_pressed="true"
android:drawable="@drawable/thumb_button_pressed" /)
(item android:state_focused="true"
android:drawable="@drawable/thumb_button_focused" /)
(item android:state_focused="false"
android:drawable="@drawable/thumb_button_normal" /)
(/selector)
- main.xml
android:layout_width="fill_parent"
android:layout_height="wrap_contents"
android:clickable="true"
android:paddingLeft="5px"
android:paddingRight="5px"
android:maxHeight="20px" // this means ProgressiveBar Height
android:max="1000"
android:progress="0"
android:fitsSystemWindows="true"
android:thumb="@drawable/seekbar_thumb"
android:progressDrawable="@drawable/seekbar"
android:secondaryProgress="0">
- seekbar.xml: Change "(" to "<"
(layer-list xmlns:android="http://schemas.android.com/apk/res/android")
(item android:id="@android:id/background")
(clip android:drawable="@drawable/bg" /)
(/item)
/*
(item android:id="@android:id/secondaryProgress")
(clip android:drawable="@drawable/progress2" /)
(/item)
*/
(item android:id="@android:id/progress")
(clip android:drawable="@drawable/progress" /)
(/item)
(/layer-list)
- seekbar_thumb.xml: Change "(" to "<"
(selector xmlns:android="http://schemas.android.com/apk/res/android")
(item android:state_pressed="true"
android:drawable="@drawable/thumb_button_pressed" /)
(item android:state_focused="true"
android:drawable="@drawable/thumb_button_focused" /)
(item android:state_focused="false"
android:drawable="@drawable/thumb_button_normal" /)
(/selector)
- Thread:
Thread.sleep( 1000 );
if( m_MediaPlayer.isPlaying() == false )
break;
m_Handler.sendMessage( m_Handler.obtainMessage() );
- SeekBar:
// SeekBar
m_SeekBar = (SeekBar)findViewById( R.id.SeekBar01 );
m_SeekBar.setProgress( 0 );
m_SeekBar.setClickable( true );
- Handler:
m_Handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if( (m_MediaPlayer == null) ) {
m_SeekBar.setProgress( 0 );
// something
// ...
return;
}
if( m_MediaPlayer.isPlaying() ) {
int position = m_MediaPlayer.getCurrentPosition();
int duration = m_MediaPlayer.getDuration();
if( m_SeekBar != null ) {
if( duration > 0 ) {
long pos = m_MediaPlayer.getDuration() * position / duration;
m_SeekBar.setProgress( m_MediaPlayer.getCurrentPosition() );
}
// something
// ...
// NOTE: below code are just sample...
// ...
int m = (int) Math.floor(m_MediaPlayer.getCurrentPosition()/(1000*60));
int s = (int) Math.floor((m_MediaPlayer.getCurrentPosition()-(1000*60)*m)/1000);
m_CurrentSec = (m * 60) + s;
String strM = m < 10 ? "0" + Integer.toString( m ) : Integer.toString( m );
String strS = s < 10 ? "0" + Integer.toString( s ) : Integer.toString( s );
m_strCurrentMS = strM + ":" + strS;
Log.d( "THREAD", "Cur = " + m_CurrentSec + ", Duration = " + m_DurationSec );
if( ((m_CurrentSec+1) >= m_DurationSec) || ((m_CurrentSec+1) >= m_DurationSec) ) {
Log.d( "THREAD", "THREAD END..." );
m_strCurrentMS = "00:00";
if( m_MediaPlayer != null ) {
m_MediaPlayer.release();
m_MediaPlayer = null;
}
m_SeekBar.setProgress( 0 ); // reset
// something
// ...
}
}
}
else {
Log.d( "THREAD", "Playing == false" );
m_strCurrentMS = "00:00";
if( m_MediaPlayer != null ) {
m_MediaPlayer.release();
m_MediaPlayer = null;
}
m_SeekBar.setProgress( 0 ); // reset
// something
// ...
}
};
};
- SeekBarListener:
NOTE: http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob_plain;f=core/java/android/widget/MediaController.java;hb=71beeab14a891297b6658c4aeb47557083091aa1
NOTE: http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob_plain;f=core/java/android/widget/MediaController.java;hb=71beeab14a891297b6658c4aeb47557083091aa1
m_SeekBar.setOnSeekBarChangeListener( new OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
if( m_MediaPlayer != null )
m_CurrentPosition = m_MediaPlayer.getCurrentPosition();
else
m_SeekBar.setProgress( 0 );
else
m_SeekBar.setProgress( 0 );
}
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// TODO Auto-generated method stub
if( !fromUser )
return;
if( m_MediaPlayer != null ) {
long duration = m_MediaPlayer.getDuration();
//long newposition = (duration * progress) / 1000L;
long newposition = (duration * progress) / m_MediaPlayer.getDuration();
m_MediaPlayer.seekTo( (int) newposition);
}
}
}
}
);
// ---------------------------------------------
:: Disable SeekBar Touch Event
seekBar.setOnTouchListener(new OnTouchListener() {@Override
public boolean onTouch(View v, MotionEvent event) {
//return false;
return true;
}
});
-----
Cheers,
June
댓글 없음:
댓글 쓰기