0

请原谅这个模糊的问题,但我是 android 和 java 的新手,而且我读过的关于这个主题的所有东西都只提供了 xml 代码示例,这对我来说没有用,因为我正在以编程方式做所有事情。

所以我有一个绘制乐谱的应用程序,然后随着音乐的播放,我需要在当前播放的音符上覆盖某种光标(可以的矩形框),卡拉 OK 风格。

我创建这样的视图

Globals.mMainView = new MainView(context);
            Globals.mMainView.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 60));
            layout.addView(Globals.mMainView);

我将视图引用保存在全局中,以便以后找到它,(是的,我知道 Java 警察此时会来找我,但我以后可以找到更优雅的解决方案)。请注意,我的视图位于线性布局中,因为它旁边有另一个不相关的视图。

在主线程中绘制 onDraw 可以很好地渲染乐谱。

所以,当我按下播放按钮时,我会启动其中一个

class Play1Activity extends AsyncTask<String, Integer, Boolean> 

并在 doInBackground 中播放音频并定期调用具有播放位置的 publishProgress ,这反过来会导致 onProgressUpdate 在 UI 线程中运行,我认为它可以安全地进行绘图

现在,我想在主视图之上绘制一些东西(我有一个参考 Globals.mMainView),而不必重新绘制整个视图以节省 CPU 并使动画看起来不错。在 Windows 中,我可以绘制一个带有 XOR 标志的矩形,它反转我感兴趣的分数部分,然后再次执行相同的操作以取消绘制它,然后在下一个位置绘制。

在这一点上,我对android一无所知。也许有人可以建议我遵循的最佳路径。谢谢

4

1 回答 1

0

如果您知道应该重绘主视图的哪个部分,您可以调用invalidate (Rect dirty)invalidate (int l, int t, int r, int b)在视图上。在这种情况下,唯一的脏区将被重绘。

于 2013-01-07T06:46:10.573 回答