热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

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

这篇文章主要介绍了android中win10使用uwp控件实现进度条Marquez效果,需要的朋友可以参考下

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

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

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

看起来 Marquez 的界面就是:     

 
 
  
  
  
 

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

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

 /// 
 /// 标识  的依赖项属性。
 /// 
 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);
  }));
 /// 
 /// 标识  的依赖项属性。
 /// 
 public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register(
  "Minimum", typeof(double), typeof(Marquez), new PropertyMetadata(default(double)));
 /// 
 /// 标识  的依赖项属性。
 /// 
 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);
  }));
 /// 
 /// 获取或设置
 /// 
 public double Value
 {
  get { return (double) GetValue(ValueProperty); }
  set { SetValue(ValueProperty, value); }
 }
 /// 
 /// 获取或设置最小值
 /// 
 public double Minimum
 {
  get { return (double) GetValue(MinimumProperty); }
  set { SetValue(MinimumProperty, value); }
 }
 /// 
 /// 获取或设置最大值
 /// 
 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 自带的依赖属性,也就是经常这样写。      

/// 
 /// 标识 Minimum 的依赖项属性。
 /// 
 public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register(
  "Minimum", typeof(double), typeof(Marquez), new PropertyMetadata(default(double)));
  /// 
 /// 获取或设置最小值
 /// 
 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效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 打开文件管理器_【教程】模组管理器3.1食用指南
    文编:byakko最近有部分小伙伴反应还不会使用unity模组管理器,现在我就给大家讲一下unity模组管理器——从下载到使用。完整视频版以下是无WiF ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 学习笔记(34):第三阶段4.2.6:SpringCloud Config配置中心的应用与原理第三阶段4.2.6SpringCloud Config配置中心的应用与原理
    立即学习:https:edu.csdn.netcourseplay29983432482?utm_sourceblogtoedu配置中心得核心逻辑springcloudconfi ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
author-avatar
初夏mx
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有