بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

مشکل در seekbar

مدیریت گفتگو
morteza1366 10 سال پیش
آخرین تغییر: 10 سال پیش

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

من یک اکتیویتی دارم که در آن یک 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();
}
}
}
});

نظرات

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

پاسخ‌ها 2

HoCoder 10 سال پیش

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

 
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 سال پیش

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

 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(); }

نظرات

Hamid 10 سال پیش
امیدوارم با این تغییرات مشکلتون حل شه!!!!!!!!!!!!!!!!

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