android 中win10 使用uwp控件實(shí)現(xiàn)進(jìn)度條Marquez效果
本文將告訴大家,如何做一個(gè)帶文字的進(jìn)度條,這個(gè)進(jìn)度條可以用在游戲,現(xiàn)在我做的掛機(jī)游戲就使用了他。
如何做上圖的效果,實(shí)際需要的是兩個(gè)控件,一個(gè)是顯示文字 的 TextBlock 一個(gè)是進(jìn)度條。
那么如何讓 文字和左邊的距離變化?使用 TranslateTransform
看起來(lái) Marquez 的界面就是:
<ProgressBar x:Name="Mcdon" Maximum="100" Minimum="0" Value="20" VerticalAlignment="Stretch"></ProgressBar> <TextBlock x:Name="scrohn" Text="100/100" VerticalAlignment="Center"> <TextBlock.RenderTransform> <TranslateTransform X="0"></TranslateTransform> </TextBlock.RenderTransform> </TextBlock>
進(jìn)度條的名字就是 Marquez ,寫完界面,后臺(tái)也不難
需要使用幾個(gè)依賴屬性設(shè)置最大值、當(dāng)前值、最小值
/// <summary> /// 標(biāo)識(shí) <see cref="Maximum" /> 的依賴項(xiàng)屬性。 /// </summary> public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register( "Maximum", typeof(double), typeof(Marquez), new PropertyMetadata(100d, (s, e) => { var t = s as Marquez; if (t == null) { return; } Scrhrentran(t.scrohn, t.ActualWidth, t.Value, (double) e.NewValue, t.Mcdon); })); /// <summary> /// 標(biāo)識(shí) <see cref="Minimum" /> 的依賴項(xiàng)屬性。 /// </summary> public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register( "Minimum", typeof(double), typeof(Marquez), new PropertyMetadata(default(double))); /// <summary> /// 標(biāo)識(shí) <see cref="Value" /> 的依賴項(xiàng)屬性。 /// </summary> public static readonly DependencyProperty ValueProperty = DependencyProperty.Register( "Value", typeof(double), typeof(Marquez), new PropertyMetadata(20d, (s, e) => { var t = s as Marquez; if (t == null) { return; } Scrhrentran(t.scrohn, t.ActualWidth, (double) e.NewValue, t.Maximum, t.Mcdon); })); /// <summary> /// 獲取或設(shè)置 /// </summary> public double Value { get { return (double) GetValue(ValueProperty); } set { SetValue(ValueProperty, value); } } /// <summary> /// 獲取或設(shè)置最小值 /// </summary> public double Minimum { get { return (double) GetValue(MinimumProperty); } set { SetValue(MinimumProperty, value); } } /// <summary> /// 獲取或設(shè)置最大值 /// </summary> public double Maximum { get { return (double) GetValue(MaximumProperty); } set { SetValue(MaximumProperty, value); } }
所有值變化時(shí),需要修改文字和進(jìn)度條,因?yàn)檫M(jìn)度條沒(méi)有綁定值到代碼,Scrhrentran 函數(shù)修改所有值。
為什么不使用綁定,因?yàn)榻壎ㄈ菀字貜?fù),而且有些值不是簡(jiǎn)單綁定就可以,這個(gè)控件使用綁定還是可以做到,如果自己感興趣,可以修改他綁定。
從屬性可以看到,值變化自動(dòng)調(diào)用 Scrhrentran 于是函數(shù)需要修改進(jìn)度條的值,修改進(jìn)度條很簡(jiǎn)單,只需要使用下面代碼
private static void Scrhrentran(TextBlock scrohn, double w, double v, double t, ProgressBar mcdon) { mcdon.Value = v; mcdon.Maximum = t; }
可以看到,上面的代碼沒(méi)修改最小值,因?yàn)樽钚≈禌](méi)有在依賴屬性寫,我不寫最小值因?yàn)槲蚁胫v下如何獲得依賴屬性修改。
依賴屬性是很好用的,他自己就帶了綁定,如果想用綁定,那么可以使用依賴屬性,依賴屬性可以使用 dep 和tab打出來(lái),一般的依賴屬性是比較長(zhǎng)的,最小值用的就是 vs 自帶的依賴屬性,也就是經(jīng)常這樣寫。
/// <summary> /// 標(biāo)識(shí) Minimum 的依賴項(xiàng)屬性。 /// </summary> public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register( "Minimum", typeof(double), typeof(Marquez), new PropertyMetadata(default(double))); /// <summary> /// 獲取或設(shè)置最小值 /// </summary> public double Minimum { get { return (double) GetValue(MinimumProperty); } set { SetValue(MinimumProperty, value); } }
實(shí)際依賴屬性是上面的靜態(tài)屬性,他使用了注冊(cè),注冊(cè)的第一個(gè)參數(shù)表示變量的名字,因?yàn)槭亲约荷傻?,就是字符串,但是字符串有?wèn)題,如果我修改了 Minimum 名稱,那么字符串就無(wú)法使用,為了在修改名稱可以使用,我建議使用 nameof 這個(gè)可以獲得變量名稱。
其中第二個(gè)參數(shù)是 類型,第三個(gè)是類,這個(gè)參數(shù)指定是哪個(gè)類,如果復(fù)制了別人的 依賴屬性,容易出錯(cuò),因?yàn)樗念悰](méi)有修改為自己的類。最后一個(gè)屬性是指定默認(rèn)值,在這個(gè)屬性可以指定屬性修改時(shí)的函數(shù)。
public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register( "Minimum", typeof(double), typeof(Marquez), new PropertyMetadata(default(double), (s, e) => { } ));
現(xiàn)在就可以在里面寫屬性修改的函數(shù),第一個(gè)參數(shù) s 是哪個(gè)觸發(fā),也就是 Marquez ,使用第一個(gè)參數(shù)就可以獲得 Marquez,第二個(gè)參數(shù)是獲得之前的值和當(dāng)前的值,通過(guò)e.NewValue可以獲得修改后的值。
但是不可以通過(guò)這個(gè)函數(shù)修改 e.NewValue 的值。
于是這個(gè)控件比較難的地方就是修改文字,下面來(lái)開(kāi)始做這部分。
顯示文字可以使用下面代碼
scrohn.Text = v.ToString("F") + "/" + t.ToString("F");
可以看到,只看代碼是不知道 v 是什么, t 是什么,所以在命名時(shí)最好不要這樣寫,建議寫為 value 和 maximum,這樣看代碼就可以知道兩個(gè)值。
修改文字之前,判斷RenderTransform
var sc = scrohn.RenderTransform as TranslateTransform;
在value為最大值,文字顯示在中間,于是文字最大的就是 w / 2 ,w就是控件寬度。但是還需要乘以現(xiàn)在的 v / t
于是算法就是 sc.X = w / 2 * v / t ,但是因?yàn)槲淖钟袑挾龋@示的是文字左邊,所以需要減去文字,但是可能讓文字在控件看不到,因?yàn)閟c.X < 0,于是代碼就是
sc.X = w / 2 * v / t - scrohn.ActualWidth / 2; if (sc.X < 0) { sc.X = 0; }
總的代碼放在github:https://github.com/lindexi/UWP/tree/master/uwp/control/Progress
以上所述是小編給大家介紹的android 中win10 使用uwp控件實(shí)現(xiàn)進(jìn)度條Marquez效果,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Android自定義雙向進(jìn)度條的實(shí)現(xiàn)代碼
- Android編程自定義進(jìn)度條顏色的方法詳解
- Android 自定義view實(shí)現(xiàn)進(jìn)度條加載效果實(shí)例代碼
- Android自定義View仿華為圓形加載進(jìn)度條
- Android進(jìn)度條控件progressbar使用方法詳解
- Android實(shí)現(xiàn)文件解壓帶進(jìn)度條功能
- Android實(shí)現(xiàn)蝸牛進(jìn)度條效果
- Android自定義圓形進(jìn)度條
- Android自定義View實(shí)現(xiàn)環(huán)形進(jìn)度條的思路與實(shí)例
- android自定義進(jìn)度條漸變色View的實(shí)例代碼
- Android編程實(shí)現(xiàn)對(duì)話框形式進(jìn)度條功能示例
相關(guān)文章
Android使用CountDownTimer實(shí)現(xiàn)倒計(jì)時(shí)效果
這篇文章主要為大家詳細(xì)介紹了Android使用CountDownTimer實(shí)現(xiàn)倒計(jì)時(shí)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09Android MVP模式ListView中嵌入checkBox的使用方法
這篇文章主要介紹了Android MVP模式ListView中嵌入checkBox的使用方法,如何在ListView中嵌入checkBox配合使用,感興趣的小伙伴們可以參考一下2016-08-08Android RecyclerView添加FootView和HeadView
這篇文章主要介紹了Android RecyclerView添加FootView和HeadView的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10Android開(kāi)發(fā)實(shí)現(xiàn)去除bitmap無(wú)用白色邊框的方法示例
這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)去除bitmap無(wú)用白色邊框的方法,結(jié)合實(shí)例形式給出了Android去除bitmap無(wú)用白色邊框的具體操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-11-11android自定義View實(shí)現(xiàn)手勢(shì)解鎖
這篇文章主要為大家詳細(xì)介紹了android自定義View實(shí)現(xiàn)手勢(shì)解鎖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06android屏蔽按鈕連續(xù)點(diǎn)擊的示例代碼
這篇文章主要介紹了android屏蔽按鈕連續(xù)點(diǎn)擊的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12textView 添加超鏈接(兩種實(shí)現(xiàn)方式)
在textView添加超鏈接,有兩種方式,第一種通過(guò)HTML格式化你的網(wǎng)址,一種是設(shè)置autolink,讓系統(tǒng)自動(dòng)識(shí)別超鏈接,下面為大家介紹下這兩種方法的實(shí)現(xiàn)2013-06-06Android實(shí)現(xiàn)一周時(shí)間早中晚排班表
項(xiàng)目需求需要實(shí)現(xiàn)一個(gè)動(dòng)態(tài)添加,修改一周早中晚時(shí)間排班表,文章給大家提供了實(shí)現(xiàn)代碼,需要的朋友參考下吧2018-07-07Android?Flutter實(shí)現(xiàn)彈簧動(dòng)畫交互的示例詳解
物理模擬可以讓應(yīng)用程序的交互感覺(jué)逼真和互動(dòng),本文章實(shí)現(xiàn)了演示了如何使用彈簧模擬將小部件從拖動(dòng)的點(diǎn)移回中心,感興趣的可以了解一下2023-04-04Android socket實(shí)現(xiàn)原理詳解 服務(wù)端和客戶端如何搭建
這篇文章主要為大家詳細(xì)介紹了Android socket實(shí)現(xiàn)原理詳解,以及服務(wù)端和客戶端的搭建方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08