android 中win10 使用uwp控件实现进度条Marquez效果

本文将告诉大家,如何做一个带文字的进度条,这个进度条可以用在游戏,现在我做的挂机游戏就使用了他。

如何做上图的效果,实际需要的是两个控件,一个是显示文字 的 TextBlock 一个是进度条。

那么如何让 文字和左边的距离变化?使用 TranslateTransform

看起来 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>

进度条的名字就是 Marquez ,写完界面,后台也不难

需要使用几个依赖属性设置最大值、当前值、最小值

/// <summary> /// 标识 <see cref="Maximum" /> 的依赖项属性。 /// </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> /// 标识 <see cref="Minimum" /> 的依赖项属性。 /// </summary> public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register( "Minimum", typeof(double), typeof(Marquez), new PropertyMetadata(default(double))); /// <summary> /// 标识 <see cref="Value" /> 的依赖项属性。 /// </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> /// 获取或设置 /// </summary> public double Value { get { return (double) GetValue(ValueProperty); } set { SetValue(ValueProperty, value); } } /// <summary> /// 获取或设置最小值 /// </summary> public double Minimum { get { return (double) GetValue(MinimumProperty); } set { SetValue(MinimumProperty, value); } } /// <summary> /// 获取或设置最大值 /// </summary> public double Maximum { get { return (double) GetValue(MaximumProperty); } set { SetValue(MaximumProperty, value); } }

所有值变化时,需要修改文字和进度条,因为进度条没有绑定值到代码,Scrhrentran 函数修改所有值。

为什么不使用绑定,因为绑定容易重复,而且有些值不是简单绑定就可以,这个控件使用绑定还是可以做到,如果自己感兴趣,可以修改他绑定。

从属性可以看到,值变化自动调用 Scrhrentran 于是函数需要修改进度条的值,修改进度条很简单,只需要使用下面代码

private static void Scrhrentran(TextBlock scrohn, double w, double v, double t, ProgressBar mcdon) { mcdon.Value = v; mcdon.Maximum = t; }

可以看到,上面的代码没修改最小值,因为最小值没有在依赖属性写,我不写最小值因为我想讲下如何获得依赖属性修改。

依赖属性是很好用的,他自己就带了绑定,如果想用绑定,那么可以使用依赖属性,依赖属性可以使用 dep 和tab打出来,一般的依赖属性是比较长的,最小值用的就是 vs 自带的依赖属性,也就是经常这样写。

/// <summary> /// 标识 Minimum 的依赖项属性。 /// </summary> public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register( "Minimum", typeof(double), typeof(Marquez), new PropertyMetadata(default(double))); /// <summary> /// 获取或设置最小值 /// </summary> public double Minimum { get { return (double) GetValue(MinimumProperty); } set { SetValue(MinimumProperty, value); } }

实际依赖属性是上面的静态属性,他使用了注册,注册的第一个参数表示变量的名字,因为是自己生成的,就是字符串,但是字符串有问题,如果我修改了 Minimum 名称,那么字符串就无法使用,为了在修改名称可以使用,我建议使用 nameof 这个可以获得变量名称。

其中第二个参数是 类型,第三个是类,这个参数指定是哪个类,如果复制了别人的 依赖属性,容易出错,因为他的类没有修改为自己的类。最后一个属性是指定默认值,在这个属性可以指定属性修改时的函数。

public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register( "Minimum", typeof(double), typeof(Marquez), new PropertyMetadata(default(double), (s, e) => { } ));

现在就可以在里面写属性修改的函数,第一个参数 s 是哪个触发,也就是 Marquez ,使用第一个参数就可以获得 Marquez,第二个参数是获得之前的值和当前的值,通过e.NewValue可以获得修改后的值。

但是不可以通过这个函数修改 e.NewValue 的值。

于是这个控件比较难的地方就是修改文字,下面来开始做这部分。

显示文字可以使用下面代码

scrohn.Text = v.ToString("F") + "/" + t.ToString("F");

可以看到,只看代码是不知道 v 是什么, t 是什么,所以在命名时最好不要这样写,建议写为 value 和 maximum,这样看代码就可以知道两个值。

修改文字之前,判断RenderTransform

var sc = scrohn.RenderTransform as TranslateTransform;

在value为最大值,文字显示在中间,于是文字最大的就是 w / 2 ,w就是控件宽度。但是还需要乘以现在的 v / t

于是算法就是 sc.X = w / 2 * v / t ,但是因为文字有宽度,显示的是文字左边,所以需要减去文字,但是可能让文字在控件看不到,因为sc.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控件实现进度条Marquez效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

时间: 2024-09-12 18:50:35

android 中win10 使用uwp控件实现进度条Marquez效果的相关文章

总结Android中MD风格相关控件_Android

要使用MD风格控件,首先需要在Gradle中加入Support Design Library,例如: compile 'com.android.support:design:24.1.1' 一.CoordinatorLayout 1.CoordinatorLayout + AppBarLayout 布局文件代码如下: <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.

总结Android中MD风格相关控件

要使用MD风格控件,首先需要在Gradle中加入Support Design Library,例如: compile 'com.android.support:design:24.1.1' 一.CoordinatorLayout 1.CoordinatorLayout + AppBarLayout 布局文件代码如下: <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.

Android中让图片自适应控件的大小的方法_Android

这就需要把.png格式的图片转成.9.png格式,.9.png就是后缀名.在安装Android-SDK时自带了<draw9patch.bat>可以把.png格式的图片编辑后保存就变成了.9.png格式.这个文件存放在你所安装的Android-SDK目录->sdk->tools目录下. .9.png格式在Andriod中可以做到根据控件大小自适应,最重要的是不会失真.是不是很完美?下面就来看是如何制作.9.png格式的进度条. 启动后的界面如下: 首先要准备要转换的png图片,并把图

Android中让图片自适应控件的大小的方法

这就需要把.png格式的图片转成.9.png格式,.9.png就是后缀名.在安装Android-SDK时自带了<draw9patch.bat>可以把.png格式的图片编辑后保存就变成了.9.png格式.这个文件存放在你所安装的Android-SDK目录->sdk->tools目录下. .9.png格式在Andriod中可以做到根据控件大小自适应,最重要的是不会失真.是不是很完美?下面就来看是如何制作.9.png格式的进度条. 启动后的界面如下: 首先要准备要转换的png图片,并把图

Android中使用Animation实现控件的动画效果以及Interpolator和AnimationListener的使用

本文转载IT宅:http://www.itzhai.com/android-animation-used-to-achieve-control-of-animation-effects-and-use-of-interpolator-and-animationlistener.html Animation的4个基本动画效果 What is Animation? public abstract classAnimation extends Object implements Cloneable A

Android中View自定义组合控件的基本编写方法_Android

有很多情况下,我们只要运用好Android给我提供好的控件,经过布局巧妙的结合在一起,就是一个新的控件,我称之为"自定义组合控件". 那么,这种自定义组合控件在什么情况下用呢?或者大家在做项目时候会发现,某些布局会被重复的利用,同一个布局的XML代码块会被重复的复制黏贴多次,这样会造成代码结构混乱不说,代码量也会增大,各种控件都需要在Java代码中被申明和处理相应的逻辑,工作量着实不小,所以,必须要找到一个合理的"偷懒"的方式,开动脑经去怎么简化以上说的不必要的麻烦

android中实现OkHttp下载文件并带进度条

OkHttp是比较火的网络框架,它支持同步与异步请求,支持缓存,可以拦截,更方便下载大文件与上传文件的操作.下面我们用OkHttp来下载文件并带进度条! 相关资料: 官网地址:http://square.github.io/okhttp/ github源码地址:https://github.com/square/okhttp 一.服务器端简单搭建 可以参考搭建本地Tomcat服务器及相关配置 这篇文章. 新建项目OkHttpServer,在WebContent目录下新建downloadfile目

HTML5新控件progress进度条例子

<progress> 标签   定义和用法   <progress> 标签定义运行中的进度(进程).   可以使用 <progress> 标签来显示 JavaScript 中耗费时间的函数的进度.   progress>表示任务的进度,背景为灰色,完成的部分填充为脉动式绿色条(但不同的浏览器下,样式还是不同的). 1,可以通过value属性来设置百分比(0~1的小数) 通常我们还可以在元素内部再放置进度值,这样当浏览器不(www.111cn.net)支持的时候就可

android:在Activity如何写一种方法,当调用时可以永久的向原来的布局中增添或修改控件?

问题描述 android:在Activity如何写一种方法,当调用时可以永久的向原来的布局中增添或修改控件? 如题,在Activity如何写一种方法,当调用时可以永久的向原来的布局中增添或修改控件? 解决方案 不明白干嘛,添加控件,无非就是先创建或渲染出一个view,然后通过addview加入到指定的容器中 解决方案二: 可控的话 先写在xml中设visible为gone. 需要的时候设置为visible 解决方案三: 不太清楚你的意思.如果就是添加界面的话,可以用两种方法,一种是楼上说的,可以