8

Android アプリケーションを作成しています。MIUI ファイル エクスプローラーの下部に表示されるものと非常によく似たプログレス バーを作成したいと考えています。

MIUI ファイル エクスプローラー アプリ

私が知る限り、完全に明白な解決策はありません。これまでのところ、私が考えることができるのは

  • 透明な背景を持つ多くのプログレス バーを重ね合わせる
  • プログレス バー クラスを拡張して複数の値を取得し、onDraw メソッドを書き直します。

最初のオプションは遅すぎて非効率的だと思いますが、2 番目のオプションは非常に複雑かもしれませんが、間違いなく優れたソリューションです。

これについてもっと良い方法はありますか?

4

5 に答える 5

6

カスタムビューを作成する必要があります。例:

final Paint blue = new Paint();
blue.setColor(Color.BLUE);

View progressBar = new View(getActivity()){

        protected void onDraw(android.graphics.Canvas canvas) {

            canvas.drawRect(0,0,getWidth()*progressPecentFirst,getHeight(),blue);
            blue.setColor(Color.RED);
            canvas.drawRect(0,0,getWidth()*progressPecentSecond,getHeight(),blue);
            //Repeat this
        };
    };
parentLayout.addView(progressBar);
于 2012-06-07T11:24:55.770 に答える
1

1 つのオプションは、従来のプログレス バーをまったく作成しないことです。私の個人的なアプリの 1 つで、さまざまな色のセグメントを持つ円形のプログレス バーに似たディスプレイが必要でした。

音楽の色で 0B から 14.9GB まで、ビデオの色で 939MB から 14.9GB まで、写真の色で 3.52GB から 14.9GB までの塗りつぶされた四角形を描くことから始めることをお勧めします。

次に、丸みを帯びた端を背景色でマスクとして描画できます。

グラフィックプリミティブのみを描画しており、必要に応じて拡張できるため、これは非常に迅速です。

唯一のわずかな欠点は、多くのロジックを自分で実装する必要があることですが、私の意見では、それは小さな代償です。

于 2012-06-07T11:26:23.060 に答える
1

助けてくれる人のために、@Zelleriation の回答に基づいて私の github に例を残します。プログレスバー。

これは私が必要としていたものに適応します。自由に変更してください。

<io.ekrlaz.segmentedprogressbar.view.SegmentProgressBar
            android:id="@+id/progress"
            android:layout_width="match_parent"
            android:layout_height="10dp"
            app:cornerRadius="16dp"
            />

そしてあなたの活動で。

val binding = ActivityMainBinding.inflate(layoutInflater)

 binding.progress.setMax(100F)
        binding.progress.setPrimaryProgress(40F)
        binding.progress.setSecondaryProgress(10F)
        binding.progress.setThirdProgress(40F)

リンク: https://github.com/EKRLAZ/segmented-progressbar

ここに画像の説明を入力

于 2020-12-10T01:21:39.333 に答える
-1

親愛なる API デモの Android SKD 2.2 のサンプルAPI デモのビルドを参照してください。ビュー -> プログレス バー -> インクリメンタルに移動すると、問題の解決策が表示されます。

于 2012-06-07T11:43:41.687 に答える