我正在为音乐家制作练习应用程序。我在 WebView
中显示音乐表和光标(突出显示注释)。当播放突出显示的音符时,我已设法让光标移动到下一个音符。对此的解决方案基本上是不断检查:
if(payedNote == highlightedNote){
cursor.next();
}
但是,我想将音乐的时间组件实现到此活动中。 我的思维过程是,实现这一目标的最简单方法是测量音符的播放时间,并在经过一段时间后移动光标。
我现在的问题是:
是否可以检查这种情况已经存在多长时间,如果没有,是否有针对这种情况的解决方法?
答案 0 :(得分:1)
你可以使用一个线程,它基本上会在后台运行,直到你告诉它停止,即线程将是一个监听器。所以在你的主题中你会得到时间:
public void start()
{
super.start();
timeStarted = System.currentTimeMillis();
}
然后当你停止线程时,你会再次得到时间,并找到两者之间的差异。
如果您想等待播放音符,可以使用thread.wait()
我希望这会有所帮助。
答案 1 :(得分:0)
获取条件变为true时的当前时间。当它变为false时,再次获取当前时间并计算差值
long startTime;
long stopTime;
wasFalse = true
if(payedNote == highlightedNote) {
cursor.next();
if (wasFalse) {
startTime = System.currentTimeMillis();
}
wasFalse = false;
} else {
stopTime = System.currentTimeMillis();
}
System.out.println("Elapsed time was " + (stopTime - startTime) + " miliseconds");
答案 2 :(得分:0)
您可以使用RxAndroid来观察变量,
1-首先创建observable并保存开始时间
Observable<Boolean> mObservable = Observable.just(payedNote == highlightedNote);
long startTime = System.currentTimeMillis();
2-订阅观察员
mObservable.map(new Func1<Boolean, Object>() {
@Override
public Object call(Boolean aBoolean) {
long stopTime = System.currentTimeMillis();
long elapsedTime = stopTime - startTime;
Log.d("ELAPSED", String.valueOf(elapsedTime));
return true;
}
});
最后当变量变为false时
致电mObservable.onNext(false)
if (payedNote == highlightedNote)
{
cursor.next();
} else {
mObservavle.onNext(false);
}
RxAndroid Gradle依赖
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'io.reactivex.rxjava2:rxjava:2.x.x'