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

مشکل در سیک بار درس ۲۲ - فوری seekbar

نورحسینی  12 سال پیش  9 سال پیش
+2 0

سلام اگر درس ۲۲ رو دیده باشید و سیک بار اون رو تو پروژه خودتون  ساخته باشید میدونید که مشکل داره و سیک بار با اجرای فایل تصویری جلو نمیره .( البته فایل من صوتیه  ) . این مشکل خیلی من رو مشغول کرده و پروژم لنگ همینه تا به ماه رمضان برسه و درست هم نمیشه . من کد سیک بار رو میزارم اساتید کمک کنن لطفا .ممنون میشم اگر کد رو کامل کنید و بزارید . اگر نه خوب راهنمایی کنید که قابل فهم باشه . ممنون.

 

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);
////////////////
}
}
0 0
ضمنا کد برای دکمه play pause هم ندارم که موفق به پیدا کردنش نشدم . ممنون میشم کمک کنید . (12 سال پیش)
0 0
از این لینک میتونی استفاده کنی (12 سال پیش)
0 0
محمد جان ممنون از لطفت. (12 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
نورحسینی  12 سال پیش
0 0

ضمن تشکر از محمد آقا اگر مشکل همین کد خودم برطرف بشه که مجبور نباشم تغییرات کلی بدم چون وقت ندارم خیلی بهتره . البته خیلی از اون لینک مطلب یاد گرفتم ولی منتظر جواب های بیشتری در مورد پروژه خودم هستم که دردسرش کمتره . ممنون

پاسخ به سوال 
مجتبی یگانه  12 سال پیش
+4 0

سلام آقای نورحسینی عزیز ؛ 

توضیحاتی میدم ، فکر کنم کمکتون کنه

شما رویداد جابه جا شدن زمان فایل مدیا رو نوشتید ، یعنی جلو عقب کردن مدیا ، اما باید به این شکل تغییر کنه 

@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 اجرا بشه

موفق باشید

0 0
ممنون مجتبی جان از وقتی که میزاری . یکم سرم شلوغ بود تازه دیدم!! (12 سال پیش)
پاسخ به سوال 
RODER  9 سال پیش
+1 0

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

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

}

});

 


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