漠然とした質問を許してください。しかし、私は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を定期的に呼び出します。これにより、描画を安全に実行できると思われるUIスレッドでonProgressUpdateが実行されます。
ここで、CPUを節約し、アニメーションの見栄えを良くするためにビュー全体を再描画することなく、メインビュー(参照Globals.mMainViewがあります)の上に何かを描画したいと思います。ウィンドウでは、XORフラグを使用して長方形を描画し、関心のあるスコアの部分を反転させてから、同じ操作を再度実行して描画を解除し、次の位置に描画します。
この時点で、私はアンドロイドについて無知です。おそらく誰かが私がたどる最良の道を提案するかもしれません。ありがとう