مشکل در سیک بار درس ۲۲ - فوری seekbar
سلام اگر درس ۲۲ رو دیده باشید و سیک بار اون رو تو پروژه خودتون ساخته باشید میدونید که مشکل داره و سیک بار با اجرای فایل تصویری جلو نمیره .( البته فایل من صوتیه ) . این مشکل خیلی من رو مشغول کرده و پروژم لنگ همینه تا به ماه رمضان برسه و درست هم نمیشه . من کد سیک بار رو میزارم اساتید کمک کنن لطفا .ممنون میشم اگر کد رو کامل کنید و بزارید . اگر نه خوب راهنمایی کنید که قابل فهم باشه . ممنون.
public class ActivityDoa_Salehi extends Activity {
private Typeface gityfont;
private Typeface koodakfont;
private Typeface bijanfont;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.doa);
final SeekBar slider = (SeekBar) findViewById(R.id.slider);
final TextView tv = (TextView) findViewById(R.id.textdoa);
//////////////////////////////
final VideoView videoPlayer = (VideoView) findViewById(R.id.videoPlayer);
Uri uri = Uri.parse("android.resource://" + G.packageName + "/" + R.raw.salehi);
videoPlayer.setVideoURI(uri);
videoPlayer.start();
///////////////////////
slider.setMax(videoPlayer.getDuration());
slider.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public float time;
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
final int duration = videoPlayer.getDuration();
float percent = progress / 100.0f;
time = duration * percent;
Log.i("LOG", "duration: " + duration + ", progress: " + progress + ", final time: " + time);
videoPlayer.seekTo((int) time);
slider.setProgress(videoPlayer.getCurrentPosition());
}
});
//////////////////////////////
Timer timer;
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
slider.setProgress(videoPlayer.getCurrentPosition());
Log.d("DDDD", Integer.toString(videoPlayer.getCurrentPosition()));
}
}, 0, 1000);
////////////////
}
}
ضمن تشکر از محمد آقا اگر مشکل همین کد خودم برطرف بشه که مجبور نباشم تغییرات کلی بدم چون وقت ندارم خیلی بهتره . البته خیلی از اون لینک مطلب یاد گرفتم ولی منتظر جواب های بیشتری در مورد پروژه خودم هستم که دردسرش کمتره . ممنون
سلام آقای نورحسینی عزیز ؛
توضیحاتی میدم ، فکر کنم کمکتون کنه
شما رویداد جابه جا شدن زمان فایل مدیا رو نوشتید ، یعنی جلو عقب کردن مدیا ، اما باید به این شکل تغییر کنه
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if(fromUser){
final int duration = videoPlayer.getDuration();
float percent = progress / 100.0f;
time = duration * percent;
Log.i("LOG", "duration: " + duration + ", progress: " + progress + ",
final time: " + time);
videoPlayer.seekTo((int) time);
slider.setProgress(videoPlayer.getCurrentPosition());
}
}
تنها شرط اضافه شد که به این معنی هست ، "اگر کاربر مدیا رو جابه جا کرده بود ، دستورات انجام بشه"
حالا میرسیم به اینکه اگر کاربر جابه جا نکرده بود ! ، یعنی Thread ما که معمولا یک ثانیه یک بار دستوراتش رو اجرا میکنه :
final MediaPlayer player = new MediaPlayer();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while (player.isPlaying()) {
try {
Thread.sleep(1000);
// Set Seekbar
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thread.start();
باید توجه کنید وقتی که مدیا پلیر از حالت پخش خارج میشه ، حالا چه pause چه stop این ترد کارش تموم میشه (حلقه دیگه اجرا نمیشه ) پس وقتی متوقف شد باید دوباره اجرا بشه ، یعنی تو رویداد play باید Thread.start اجرا بشه
موفق باشید
خب شما میتونی از مدیا کنترلر استفاده کنی
MediaController mc = new MediaController(this);
mc.setMediaPlayer(videoView);
videoView.setMediaController(mc);
و حالا برای اینکه وقتی ویدیو تموم شد چه کاری انجام بده کد زیر رو مینویسیم :
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
Toast.makeText(getApplicationContext(),"تمام شد",Toast.LENGTH_SHORT).show();
videoView.start();
videoView.pause();
}
});
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .