-2

ListView歌詞を表示するための を作ろうとしています。カスタム複合ビューを作成した経験はほとんどありません。ですから、この見方をするための私のアプローチはどうあるべきか知りたいです。これらのListView機能が必要です

  • 曲に基づく自動スクロール (タイミング情報はリスト アダプターに保存されます)
  • オーディオで再生されている現在の行を強調表示する
  • きれいにフォーマットされた詩のように見えるように、いくつかの行にインデントを付けます
  • ユーザーは曲の再生中 (つまり、リストが自動スクロールされているとき) にリストをスクロールできないようにする必要がありますが、曲の一時停止中はスクロールできるようにする必要があります。

ビューがリスト ビューを拡張する必要があるかどうかはわかりません。そうでない場合、それは何を拡張する必要があり、私のアプローチは何であるべきですか?

4

1 に答える 1

0

率直に言って、これに完全に答えるには十分な情報がありませんが、これは私がすることです:

スクロール機能がまったく必要ないため(実際にユーザーがスクロールできるようにするのではなく、スクロールしているように見せたい)、複雑なビューは使用しませんListView や ScrollView のように、View を拡張するだけのカスタム ビューを作成します。その onDraw() メソッドをオーバーライドし、Canvas.drawText(...) を使用して単語を描画し、現在の単語用と他のすべての単語用の 2 つの異なるペイントを使用します。「スクロール」効果については、現在表示されている一番上の行を表す数値を保持し、次の行にスクロールしたいときにこの数値に 1 を追加することができます。ただし、スムーズにするために、テキストの描画を開始する正確な場所を操作し、ゆっくりと上に移動して、すべてが下にスクロールしているように見せることができます。

** ここでは単に View ではなく SurfaceView を使用する方が良いでしょう。特に、背景画像と滑らかなブレンドと見栄えが必要な場合は、SurfaceView が複雑な図面に適しているためです **

それが複雑すぎて、自分で描画を行わずに既存のビューを完全に使用したい場合は、垂直 ScrollView をお勧めします。ScrollView を行ごとに水平 LinearLayouts で埋め、それぞれに TextViews を入力します。すべての特定の単語。TextViews と LinearLayouts をプログラムで構築できます。ScrollView の scrollTo(...) または SmoothScrollTo(...) を使用して、正しい位置までスクロールします。スクロールに使用される前にすべてのモーション イベントをキャプチャすることで、ユーザーがスクロールできないようにすることができます。

もちろん、どちらのアプローチでも、各単語が選択された時間を保持するために何らかの形式のデータ構造を維持する必要があります。

于 2013-11-03T13:46:17.937 に答える