当媒体播放器在 xamarin android 上播放时,SeekBar 不会 运行
SeekBar won't run when media player are playing on xamarin android
SeekBar 小部件是一个交互式滑块,允许用户select 从一系列值中选择一个值。当用户向左或向右移动滑块时,SeekBar 的值将发生变化
public int getProgressPercentage(int currentDuration, int totalDuration)
{
int percentage;
int currentSeconds = (int)(currentDuration / 1000);
int totalSeconds = (int)(totalDuration / 1000);
//calculating percentage
percentage = (((int)currentSeconds) / totalSeconds) * 100;
return percentage;
}
public void UpdatedTimerTask()
{
//Displaying time
//txtCurrentTimer.Text = utils.miliSecondsTotimer (player.CurrentPosition);
//txtTotalTimer.Text = utils.miliSecondsTotimer (player.Duration);
//Updating progress bar(seekbar)
int progress=(int)(utils.getProgressPercentage(player.CurrentPosition,player.Duration));
seekBar.Progress = progress;
}
void SeekBar_ProgressChanged (object sender, SeekBar.ProgressChangedEventArgs e)
{
UpdatedTimerTask ();
}
public void StartMedia(string url_string)
{
player = new MediaPlayer ();
seekBar.Progress = 0;
seekBar.Max = 100;
player.Reset ();
player.SetAudioStreamType (Stream.Music);
player.SetDataSource(url_string);
player.Prepare();
player.Start ();
imgPlayorPause.SetImageResource (Resource.Drawable.ic_pause_black_36dp);
UpdatedTimerTask ();
}
seekBar.SetOnSeekBarChangeListener (this);
有一些无效参数。
媒体播放器播放时,SeekBar 不会运行。
您有两个选择:
SetOnSeekBarChangeListener()
如果您想使用 SetOnSeekBarChangeListener
,您必须在 this
的 class 中实现 IOnSeekBarChangeListener
(通常是您的 activity。缺点 是,你只能有一个事件侦听器。
[Activity]
public class MyActivity : Activity, SeekBar.IOnSeekBarChangeListener
{
protected override void OnCreate(Bundle bundle)
{
// ...
seekbar.SetOnSeekBarChangeListener(this);
}
public void OnProgressChanged(SeekBar seekBar, int progress, bool fromUser)
{
// do some stuff
}
public void OnStartTrackingTouch(SeekBar seekBar)
{
}
public void OnStopTrackingTouch(SeekBar seekBar)
{
}
}
ProgressChanged 事件
Xamarin 将 Java 类调用方法 SetXyzListener
映射到名为 Xyz
的事件。
如果你想使用 ProgressChanged
,你必须用 seekbar.ProgressChanged += SeekbarOnProgressChanged
注册你的处理程序。 缺点 是,当您不再需要该事件时,您必须确保使用 seekbar.ProgressChanged -= SeekbarOnProgressChanged
删除处理程序。您应该在已添加处理程序的生命周期方法的对应部分中执行此操作。在下面的示例中,我使用了 OnResume
和 OnPause
.
[Activity]
public class MyActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// ...
}
protected override void OnResume()
{
base.OnResume();
seekbar.ProgressChanged += SeekbarOnProgressChanged;
}
protected override void OnPause()
{
seekbar.ProgressChanged -= SeekbarOnProgressChanged;
base.OnPause();
}
private void SeekbarOnProgressChanged(object sender, SeekBar.ProgressChangedEventArgs progressChangedEventArgs)
{
// do some stuff
}
}
SeekBar 小部件是一个交互式滑块,允许用户select 从一系列值中选择一个值。当用户向左或向右移动滑块时,SeekBar 的值将发生变化
public int getProgressPercentage(int currentDuration, int totalDuration)
{
int percentage;
int currentSeconds = (int)(currentDuration / 1000);
int totalSeconds = (int)(totalDuration / 1000);
//calculating percentage
percentage = (((int)currentSeconds) / totalSeconds) * 100;
return percentage;
}
public void UpdatedTimerTask()
{
//Displaying time
//txtCurrentTimer.Text = utils.miliSecondsTotimer (player.CurrentPosition);
//txtTotalTimer.Text = utils.miliSecondsTotimer (player.Duration);
//Updating progress bar(seekbar)
int progress=(int)(utils.getProgressPercentage(player.CurrentPosition,player.Duration));
seekBar.Progress = progress;
}
void SeekBar_ProgressChanged (object sender, SeekBar.ProgressChangedEventArgs e)
{
UpdatedTimerTask ();
}
public void StartMedia(string url_string)
{
player = new MediaPlayer ();
seekBar.Progress = 0;
seekBar.Max = 100;
player.Reset ();
player.SetAudioStreamType (Stream.Music);
player.SetDataSource(url_string);
player.Prepare();
player.Start ();
imgPlayorPause.SetImageResource (Resource.Drawable.ic_pause_black_36dp);
UpdatedTimerTask ();
}
seekBar.SetOnSeekBarChangeListener (this);
有一些无效参数。
媒体播放器播放时,SeekBar 不会运行。
您有两个选择:
SetOnSeekBarChangeListener()
如果您想使用 SetOnSeekBarChangeListener
,您必须在 this
的 class 中实现 IOnSeekBarChangeListener
(通常是您的 activity。缺点 是,你只能有一个事件侦听器。
[Activity]
public class MyActivity : Activity, SeekBar.IOnSeekBarChangeListener
{
protected override void OnCreate(Bundle bundle)
{
// ...
seekbar.SetOnSeekBarChangeListener(this);
}
public void OnProgressChanged(SeekBar seekBar, int progress, bool fromUser)
{
// do some stuff
}
public void OnStartTrackingTouch(SeekBar seekBar)
{
}
public void OnStopTrackingTouch(SeekBar seekBar)
{
}
}
ProgressChanged 事件
Xamarin 将 Java 类调用方法 SetXyzListener
映射到名为 Xyz
的事件。
如果你想使用 ProgressChanged
,你必须用 seekbar.ProgressChanged += SeekbarOnProgressChanged
注册你的处理程序。 缺点 是,当您不再需要该事件时,您必须确保使用 seekbar.ProgressChanged -= SeekbarOnProgressChanged
删除处理程序。您应该在已添加处理程序的生命周期方法的对应部分中执行此操作。在下面的示例中,我使用了 OnResume
和 OnPause
.
[Activity]
public class MyActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// ...
}
protected override void OnResume()
{
base.OnResume();
seekbar.ProgressChanged += SeekbarOnProgressChanged;
}
protected override void OnPause()
{
seekbar.ProgressChanged -= SeekbarOnProgressChanged;
base.OnPause();
}
private void SeekbarOnProgressChanged(object sender, SeekBar.ProgressChangedEventArgs progressChangedEventArgs)
{
// do some stuff
}
}