您好,我想平稳地更新seekbar,每秒钟更新一次,所以我创建了一个使用计时器的方法,每秒钟更新seekbar,但它每秒钟都在更新歌曲,我到处搜索,但没有找到解决方案,我不想使用任何处理程序,我想用这个方法修复
private void updateseekbar() {
seekBar.setMax(mediaPlayer.getDuration());
new Timer().schedule(new TimerTask() {
@Override
public void run() {
seekBar.setProgress(mediaPlayer.getCurrentPosition());
}
},1000,1000);
在这里我实现了歌曲开始时的方法
public void play(View v) {
if (mediaPlayer == null) {
mediaPlayer = MediaPlayer.create(this, songlist.get(index));
mediaPlayer.start();
updateseekbar();
imageview.setImageResource(R.drawable.img_btn_play_pressed);
} else if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
imageview.setImageResource(R.drawable.img_btn_pause);
} else if (mediaPlayer != null) {
mediaPlayer.start();
imageview.setImageResource(R.drawable.img_btn_play_pressed);
}
这是我的全部代码
private SeekBar seekBar;
TextView startduration,totalduration;
ImageView imageview, forwardd, backword, next, previous;
ArrayList<Integer> songlist = new ArrayList<>();
MediaPlayer mediaPlayer;
int seektime = 5000;
int index = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekBar = (SeekBar) findViewById(R.id.seekBar);
imageview = (ImageView) findViewById(R.id.imageview);
forwardd = (ImageView) findViewById(R.id.forwardd);
backword = (ImageView) findViewById(R.id.backword);
next = (ImageView) findViewById(R.id.next);
previous = (ImageView) findViewById(R.id.previous);
startduration= (TextView) findViewById(R.id.startduration);
totalduration= (TextView) findViewById(R.id.totalduration);
songlist.add(R.raw.diljaniya);
songlist.add(R.raw.stand);
songlist.add(R.raw.haledil);
songlist.add(R.raw.myname);
songlist.add(R.raw.fiftyways);
songlist.add(R.raw.desiboys);
previous = (ImageView) findViewById(R.id.previous);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
seekBar.setMax(mediaPlayer.getDuration());
mediaPlayer.seekTo(i);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
forwardd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mediaPlayer != null) {
int med = mediaPlayer.getCurrentPosition();
if (med <= mediaPlayer.getDuration()) {
mediaPlayer.seekTo(med + seektime);
seekBar.setProgress(med+seektime);
}
} else {
}
}
});
backword.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mediaPlayer != null) {
int med = mediaPlayer.getCurrentPosition();
if (med - seektime >= 0) {
mediaPlayer.seekTo(med - seektime);
seekBar.setProgress(med-seektime);
} else {
}
} else {
}
}
});
}
public void play(View v) {
if (mediaPlayer == null) {
mediaPlayer = MediaPlayer.create(this, songlist.get(index));
mediaPlayer.start();
updateseekbar();
imageview.setImageResource(R.drawable.img_btn_play_pressed);
} else if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
imageview.setImageResource(R.drawable.img_btn_pause);
} else if (mediaPlayer != null) {
mediaPlayer.start();
imageview.setImageResource(R.drawable.img_btn_play_pressed);
}
}
public void previouss(View v) {
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.reset();
}
if (index < songlist.size() - 1) {
mediaPlayer = MediaPlayer.create(this, songlist.get(index));
mediaPlayer.start();
seekBar.setProgress(0);
} else {
index = 0;
return;
}
index++;
}
public void next(View v) {
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.reset();
}
if (index < songlist.size()) {
mediaPlayer = MediaPlayer.create(this, songlist.get(index));
mediaPlayer.start();
seekBar.setProgress(0);
} else {
index = 0;
return;
}
index++;
}
private void updateseekbar() {
seekBar.setMax(mediaPlayer.getDuration());
new Timer().schedule(new TimerTask() {
@Override
public void run() {
seekBar.setProgress(mediaPlayer.getCurrentPosition());
}
},1000,1000);
}
}
将计时器声明为全局成员变量,如下所示;
Timer timer=new Timer();
像这样更新updateseekbar方法里面的歌曲
private void updateseekbar(Boolean songPlay) {
if(songPlay){
timer.schedule(new TimerTask() {
@Override
public void run() {
seekBar.setProgress(mediaPlayer.getCurrentPosition());
}
},1000,1000);
handler.postDelayed(runnable,0);
}else {
timer.cancel();
timer.purge();
}
}
在播放这样的歌曲时更新seekBar
updateseekbar(true);
像这样停止seekBar更新
updateseekbar(false);
我有一个脚本(bash),它监视pm2内存使用情况,如果pm2进程占用的内存超过2 GB,则重新启动进程。但是当我从脚本中运行命令(pm2 restart all)时,pm2中的所有进程不断地一次又一次地重新启动。 我正在通过crontab运行这个脚本。 我想要能够成功地重新启动所有的应用程序,而不需要连续的重新启动。
我对高级Java和可重入锁的学习相当陌生。我知道ReentrantLock有一个公平性参数,它确保将锁提供给最缺线程(与同步的内部锁不同) 但是,Reentrant也意味着同一线程可以通过递增holdcount来一次又一次地重新获取锁。如果同一个线程一直获得锁,它如何保证公平性?
问题内容: 我有两个表需要相同的值以实现非规范化。 这是查询。 第一张桌子 第二张桌子 如您所见,两个表之间的唯一区别是它们的名称和两个表没有该字段 无论如何将两个更新合并为一个? 问题答案: 如文档中所述,应该可以进行多表更新。 http://dev.mysql.com/doc/refman/5.5/en/update.html 注意:多表不支持LIMIT,因此根据具体情况,这可能会引起更多麻烦
我问这个问题,尽管它已经被问了很多次,因为我找了几个小时没有找到解决办法。 但这还不是全部:我工作区中的每个项目都有同样的问题。我什么都跑不了。起初我以为这是因为我在Eclipse启动时犯了一个错误,所以我关闭了它并重新打开了它,但我在正确的工作区中。 我试图清理/重建它,但不起作用。 我试图扰乱属性>Java构建路径,但不起作用。 我试图用一个简单的“Hello World”创建一个新项目,但不
问题内容: 我每周有一些设备的日志数据。对于某些设备,它从星期一开始,对于某些设备,它在星期三开始,等等。有时此数据中有〜月的间隔,但是我希望DataFrame索引仍然包含每周具有NaN值的行。 我正在尝试在Python中使用,但是我无法获得期望的结果。 例: 是)我有的: 我期望/想要的(请注意带有NaN的2个新行): 我得到的是: 因此,我获得了每个星期日的所有值和日期。但是我不需要每个星期天
使用PyGame,我可以得到闪烁的东西。盒子,圆圈,文字,一切都在闪烁。我可以通过增加循环之间的等待时间来减少这种情况,但我想我可以通过一次将所有内容都绘制到屏幕上来消除这种情况,而不是单独进行所有操作。下面是一个发生在我身上的简单例子: “开始”按钮为我闪烁。这可能只是我较慢的电脑,但是有没有办法减少或消除闪烁?在我正在做的更复杂的事情中,情况变得非常糟糕。谢谢!