بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
مشکل در seekbar
سلام به همه دوستان
من یک اکتیویتی دارم که در آن یک 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(); }
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .