スキップしてメイン コンテンツに移動

.NET MAUI Progress Barが見た目がよくないので Progress Ringを使ってみた

何でProgress Ring?

MAUIでスマホのアプリを作っていると、どうしても標準じゃないコントロールを使いたくなる
・・・が、MAUIはGUIツールとしてはあんまりその手のコントロールが充実していない
スマホで横一直線に伸びるプログレスバーもダサいよなと思って探してみました

なので自作、は辛いので誰かいいものを作っててくれないかなぁと探したらVisual Studioのnugetに色々あった

nugetにあった

nugetにはいっぱいあった。世の中にはいい人がいっぱいいた。

何を選んだか

MPowerKit.ProgressRing

私が選んだのはMPowerKit.ProgressRingというコントロール。
他にもProgress Ring関連はいっぱいあるのだけど使い方の簡単そうなのを選びました。

サンプルに不備あり

不備というほどのものではないが・・・githubのreadmeページのサンプルだと動かない。フォーム中にコントロールを使えるようにするヘッダが書いてないぜ。

とりあえず実装

MainPage.xml

githubのサンプルソースを見てみた。
で作ってみたのがこのメインページ。

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:pr="clr-namespace:MPowerKit.ProgressRing;assembly=MPowerKit.ProgressRing"    
             x:Class="MauiProgressRingTest.MainPage"
             Title="リングのテスト">
    <ScrollView>
        <StackLayout Orientation="Vertical" VerticalOptions="Start">
            <Label Text="現在値" x:Name="NowValue" HorizontalOptions="Center" VerticalOptions="StartAndExpand" />
            <pr:ProgressRing x:Name="progressRing"
                            VerticalOptions="StartAndExpand"
                             IsIndeterminate="False"
                             Smooth="True"
                             StrokeLineCap="Round"
                             HeightRequest="200"
                             WidthRequest="100"
                             Thickness="30"
                             Color="Red" />
            <Button Text="スタート!" Clicked="Button_Clicked" />
        </StackLayout>
    </ScrollView>
</ContentPage>

何が追加されかたというと
先頭の「xmlns:pr="clr-namespace:MPowerKit.ProgressRing;assembly=MPowerKit.ProgressRing"

という部分。readmeにはこれが抜けている。後はラベルとボタンを付けただけ。

MainPage.xaml.cs

そしてボタンを押したらプログスリングを動作するようにした

namespace MauiProgressRingTest
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private async void Button_Clicked(object sender, EventArgs e)
        {
            progressRing.IsIndeterminate = false;

            for (int i = 0; i <= 100; i++)
            {
                await Task.Delay(50);
                progressRing.Progress = i / 100.0;                  // プログレスリングが進む
                NowValue.Text = progressRing.Progress.ToString();   // 進捗率をラベルに表示
            }
            progressRing.IsIndeterminate = true;
        }
    }
}

難しいことはやっていない。
Task.Delay()は、これを入れないとfor-ループの中で画面が更新されないため。
この辺は、他のクラスを作って更新された進捗率をイベントで上げたら更新するのにBeginInvokeOnMainThread()で書き換えたりと自分のやり方でやる必要がある。

こんなふうになる

進捗率による表示

良い感じじゃないでしょうか

太さを変える

Thicknessというプロパティで太さが変えられます。

比率も変わる

HeightRequestとWidthRequestを比率を変えると(例えば下の例だとHeightRequest=200/WidthRequest=100)ちょっとグニャグニャした感じになる。

つーても、HeightRequestとWidthRequestは他のコントロールでもしょっちゅう使うので設定を間違ったときしかこんなふうにならないかな。

こんなのに何処に需要があるのだと言われそう

最後に

俺がダウンロードしたときはまだ600ダウンロードくらいしかされていないし、他にもProgress Ringはいっぱい公開されている。

人によって、色々こだわりがあると思うので自分の気に入ったのを使ってみてください。
といっても公開日が2017年とかそういうのもあるので・・・それはちょっと・・・って感じ

おしまい




コメント

このブログの人気の投稿

RAM DISKを使ってみた(使ったのはImDisk)

GWだし、まあちょっとラムディスクを入れてみました うちのPCはWindows11 使ったのはImDiskというRAM Disk。 まあ、この辺のインストールとかはあちこちで解説してる人がいるので適当にぐぐってくださいな で、とりあえずベンチマーク なかなかいいスピードだ で、大抵の人はブラウザのキャッシュをRAMディスクにするといいよ・・・と言うけど そもそもメインドライブがNVMeのSSDを使っている状態で、体感速度なんか上がらない(使い終わったキャッシュを再起動したら綺麗さっぱり捨て去ってくれるという利点はある)  うちで一番効果があるのは Adobe Audition というアプリ これが結構高速化する(キャッシュをちゃんとRAMディスクにしたら・・・だけど) ハイレゾ音源だと、1時間の音源が何かする度に4GBのファイルを作られてしまう なので、RAM DISKにすると、結構編集時間を短縮できる Premiere Rushも出力先をRam Diskにしておいて終わったら、SSDにコピーすると言う事をやるとかなりスピードアップになる 実はうちのPCは普段は99%のパワーで動作していて、CPUのターボブーストが掛からないようになっている 大体3.6GHz当たりで安定してるのだけど、これを100%にするとターボブースト機能がONになって一部のコアが4.5とか4.8GHzまで上がる まあ、毎回電源オプションをいじる事になるのだけどさ・・・ そうしてベンチを取ると こんな感じ とは言え、ブーストしてるからと行ってRam Diskのスピードの差を体感する事はさすがに無理 ・・・と言うかフォトショでもRAM DISKにしてよかった・・・と言うほど変わらない SSDの性能が上がってきたしもし次にPCを買い換えたらRAM DISKよりSSDの方が速いかもね  

.NET MAUI BLE(Bluetooth Low Energy)も上手く行った

2023/10/11更新 ↓こちらの記事で更新しれました。 .NET MAUI PLUGIN BLEがWindows(10/11)に対応してた Windows対応 イヤッッホォォォオオォオウ Bluetooth LE plugin for Xamarin &amp; MAUI がWindowsに対応してた~ nugetでver3.00をみんな早速ゲットだ。   ちなみにこちらはAndroid版のサンプルアプリ   GitHub...   [ブログカード風リンクタグ作成] ------------------------------------------------------------------------------ 昔、スマホとESP32の接続確認用に作ったプログラムをXamarinからMAUIに移植したら動いちゃった   まあ、ESP32からスマホへの一方通行なアプリなんだけど 面倒くさいので github に公開した 下手くそなコード書きやがってとか思われそう 「間違ってるぞこのやろう」というのを見つけたら教えてくれると嬉しいです 要素技術の調査はこれで完了かな

.NET MAUIでスプラッシュスクリーン Android12で地獄を見る

まずは起動するところから・・・・  スプラッシュスクリーンだぬ マイクロソフトのサイト 見てると簡単そう(実際簡単で細かい事を気にしなければsvgファイルを用意して1行だけ書き換えておしまい)   なんかプロジェクトファイルに自動で記述されるらしい よし、プロジェクト作った                     つーか、もうスプラッシュがあるんだけど・・・・ そして自作のsvgファイル くうっ・・・デザインセンスない・・・・   それはともかく、このSVGファイルを Resources\Images にドラッグ&ドラッグ プロジェクトを右クリックして「プロジェクトファイルの編集」 して、編集できるようになったプロジェクトファイルを 自分のプロジェクトファイルに書き換える <MauiSplashScreen Include="Resources\Splash\splash.svg" Color="#512BD4" BaseSize="168,168" /> ↓ <MauiSplashScreen Include="Resources\Splash\ splashtestmaui .svg" Color="#512BD4" BaseSize="168,168" />   とりあえずAndroidで実行 お、おう・・・・ まあ最初はこんなもんよね 最初に紹介したマイクロソフトのサイトでもBaseSizeを書き換えてくださいって言ってるし 言われたとおりに <MauiSplashScreen Include="Resources\Splash\splashtestmaui.svg" Color="#512BD4" BaseSize=" 320,600 " /> 書き換えてみると いい感じじゃーん じゃあアンドロイドのバージョン毎に試してみよう   Android 7 Android 11 Android 12 Android 13