آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل در seekbar

morteza1366  10 سال پیش  10 سال پیش
0 0

سلام به همه دوستان

من یک اکتیویتی دارم که در آن یک seekbar هست که با پخش شدن فایل صوتی می خواهم دکمه seekbar حرکت بکنه.

دکمه seekbar تکون نمیخوره و سر جاش ثابته.کجای کد اشتباه نوشتم؟

خیلی ممنون

 

  Intent i = getIntent();

// مقادیر را از لیست ویو اکتیویتی دریافت می کند
EnglishText = i.getStringExtra("EnglishText");
soundid = i.getIntExtra("soundid", soundid);
ContentstoryAudio.setText(EnglishText);

final MediaPlayer mediaplayer = MediaPlayer.create(getApplicationContext(), soundid); //important line for play sounds

// ######### az rooye moshakhasate file soti seekbar ro tanzim mikonim...
mediaplayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

@Override
public void onPrepared(MediaPlayer mediaPlayer) {
seekBar.setMax(mediaplayer.getDuration());
// seekBar.postDelayed(onEverySecond, 1000); i must comment this line because i delete method Runnable() and use Thread
}
});

// ########## mediaplayer ro start mikonim

mediaplayer.start();
// ############## baraye inke vaghti seekbar ro jabeja mikonid...
try {
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}


@Override
public void onStartTrackingTouch(SeekBar seekBar) {

}


@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {

if (fromUser) {
// vaghti seek bar ro jabeja mikonim inja ejra mishe...
mediaplayer.seekTo(progress);

int curPosition= mediaplayer.getCurrentPosition();

int currentSec = (curPosition/ 1000);

if (currentSec > 1 && currentSec < 23) {
SpannableString styledString = new SpannableString(EnglishText);
styledString.setSpan(new BackgroundColorSpan(Color.CYAN), 0, 204, 0);
ContentstoryAudio.setText(styledString);

}

if (currentSec > 24 && currentSec < 42) {
SpannableString styledString = new SpannableString(EnglishText);
styledString.setSpan(new BackgroundColorSpan(Color.CYAN), 205, 395, 0);
ContentstoryAudio.setText(styledString);

}

if (currentSec > 43 && currentSec < 50) {
SpannableString styledString = new SpannableString(EnglishText);
styledString.setSpan(new BackgroundColorSpan(Color.CYAN), 398, 468, 0);
ContentstoryAudio.setText(styledString);

}

}

});

}

catch (Exception e) {
e.printStackTrace();
}

///////////////////////////

} // end of onCreate

// in ye joor timer hast ke har sanie yek bar seekbar ro update mikone

Thread thread = new Thread(new Runnable() {

@Override
public void run() {

while (mediaplayer.isPlaying()) {
try {

Thread.sleep(1000);
// Set Seekbar
seekBar.setProgress(mediaplayer.getCurrentPosition()); // in line code az method Runnable zir copy cardam.

}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
0 0
سلام؛کسی نیست به من کمک کنه این مشکل حل کنم؟ (10 سال پیش)
+1 0
سوالم اشتباه توضیح داده بودم،الان کسی جواب مشکل منو نمی دونه؟ (10 سال پیش)
+2 0
دستور thread.start رو استفاده کردید ؟ (10 سال پیش)
0 0
ممنون جواب دادید؛ نه ؛ الان استفاده کردم برنامه force close شد؛کجای کد اشتباه نوشتم؟ (10 سال پیش)
+1 0
شما باید seekbar رو با handler تغییر بدید (10 سال پیش)
0 0
منظورتون اضافه کردنه این کد: ;(handler.postDelayed(this, 1000 بازم force close داد؛دیگه چیکار کنم؟ (10 سال پیش)
+1 0
نه شما باید با متد post یک runnable به MainThread بفرستید. handler.post(new Runnable); دستورش اینه (10 سال پیش)
+1 0
برای تغییر روی UI شما باید به Main Thread دسترسی داشته باشید که برای این کار نیاز هست از Handler استفاده کنید داخل ترد ، در این مورد آموزش های استاد را مطالعه کنید . (10 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
HoCoder  10 سال پیش
+1 0

من کد شما رو نخوندم ولی از این کد استفاده کنید امیدوارم کمک کنه به این لینک هم سر بزنید

 
mSeekBar.setMax(mFileDuration);


privateHandler mHandler =newHandler();MainActivity.this.runOnUiThread(newRunnable(){@Overridepublicvoid run(){if(mMediaPlayer !=null){int mCurrentPosition = mMediaPlayer.getCurrentPosition()/1000; mSeekBar.setProgress(mCurrentPosition);} mHandler.postDelayed(this,1000);}});


mSeekBar.setOnSeekBarChangeListener(newSeekBar.OnSeekBarChangeListener(){@Overridepublicvoid onStopTrackingTouch(SeekBar seekBar){}@Overridepublicvoid onStartTrackingTouch(SeekBar seekBar){}@Overridepublicvoid onProgressChanged(SeekBar seekBar,int progress,boolean fromUser){if(mMediaPlayer !=null&& fromUser){ mMediaPlayer.seekTo(progress *1000);}}});
پاسخ به سوال 
Hamid  10 سال پیش
+1 0

کدتون رو به این صورت ویرایش کنید!

 Thread thread =newThread(newRunnable(){

@Override
publicvoid run(){

while(mediaplayer.isPlaying()){
try{

Thread.sleep(1000);
// Set Seekbar
===================================================================================================================
در این قسمت بنویس

update();

======================================================================================================
seekBar.setProgress(mediaplayer.getCurrentPosition());// in line code az method Runnable zir copy cardam.

}
catch(InterruptedException e){
e.printStackTrace();
}
}
}
});

=====================================================================================================
و در این قسمت هم

private void update() { float s; ss = mp.getDuration(); s = (float) mp.getCurrentPosition() / 12140; progres.setProgress(((int) s)); onBackPressed(); }
+1 0
امیدوارم با این تغییرات مشکلتون حل شه!!!!!!!!!!!!!!!! (10 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .