小米视频加载进度条效果实现

原文:小米视频加载进度条效果实现

  好吧,其实这些都是我闲暇时自己做着玩的,以前总是拿来主义,现在分享一下让我也为大家做一点贡献好了。废话不说了,看效果。

好吧 其实没什么技术含量 直接上代码好了 和我上一篇利用WPF动画实现圆形进度条是一个道理,表现形式不同而已。

 1 <UserControl x:Class="MyUserControlLibrary.CircleProgressbarcontrol"
 2              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 5              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 6              xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing"
 7              xmlns:local ="clr-namespace:MyUserControlLibrary"
 8              mc:Ignorable="d"
 9              d:DesignHeight="60" d:DesignWidth="60" MinWidth="60" MinHeight="60" Loaded="UserControl_Loaded">
10     <UserControl.Resources>
11         <local:ConverterCircleToPercent x:Key="converter"/>
12         <Storyboard x:Key="MainStoryboard">
13             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(ed:Arc.EndAngle)" Storyboard.TargetName="ProgressArea">
14                 <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
15                 <EasingDoubleKeyFrame KeyTime="0:0:0.05" Value="360"/>
16             </DoubleAnimationUsingKeyFrames>
17         </Storyboard>
18     </UserControl.Resources>
19     <Grid>
20         <Border Name="MainBorder" Margin="0,0,0,0" CornerRadius="500" BorderThickness="2" BorderBrush="White" Opacity="0.6" Background="Black"/>
21         <ed:Arc Name="ProgressArea" Margin="5,5,5,5" ArcThickness="1" StartAngle="0" EndAngle="0" ArcThicknessUnit="Percent" Stretch="None" Fill="White" Opacity="0.4"/>
22         <Ellipse Name="CenterCircle" Width="5" Height="5" Fill="White" Opacity="0.7"/>
23         <Label Name="AreaShow" Margin="10,10,10,10" Content="{Binding ElementName=ProgressArea, Path=EndAngle,Converter={StaticResource converter}}" Foreground="White" FontFamily="宋体" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" FontSize="20" Opacity="0.8"/>
24     </Grid>
25 </UserControl>

XMAL前端

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Windows;
  6 using System.Windows.Controls;
  7 using System.Windows.Data;
  8 using System.Windows.Documents;
  9 using System.Windows.Input;
 10 using System.Windows.Media;
 11 using System.Windows.Media.Animation;
 12 using System.Windows.Media.Imaging;
 13 using System.Windows.Navigation;
 14 using System.Windows.Shapes;
 15
 16 namespace MyUserControlLibrary
 17 {
 18     /// <summary>
 19     /// CircleProgressbarcontrol.xaml 的交互逻辑
 20     /// </summary>
 21     public partial class CircleProgressbarcontrol : UserControl
 22     {
 23         #region 属性
 24
 25         private bool isShowPercent = true;
 26         /// <summary>
 27         /// 是否显示百分比
 28         /// </summary>
 29         [System.ComponentModel.Browsable(true),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("获取或设置是否显示百分比")]
 30         public bool IsShowPercent {
 31             get {
 32                 return isShowPercent;
 33             }
 34             set {
 35                 isShowPercent = value;
 36                 if (isShowPercent)
 37                 {
 38                     AreaShow.Visibility = System.Windows.Visibility.Visible;
 39                 }
 40                 else {
 41                     AreaShow.Visibility = System.Windows.Visibility.Hidden;
 42                 }
 43             }
 44         }
 45
 46         private TimeSpan percentTimeSpan = new TimeSpan(0, 0, 1);
 47         /// <summary>
 48         /// 每次更新百分比时的经过时间
 49         /// </summary>
 50         [System.ComponentModel.Browsable(true),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("获取或设置每次更新百分比时的经过时间")]
 51         public TimeSpan PercentTimeSpan {
 52             get {
 53                 return percentTimeSpan;
 54             }
 55             set {
 56                 percentTimeSpan = value;
 57                 Storyboard sb = (Storyboard)this.Resources["MainStoryboard"];
 58                 ((DoubleAnimationUsingKeyFrames)sb.Children[0]).KeyFrames[1].KeyTime = KeyTime.FromTimeSpan(value);
 59             }
 60         }
 61
 62         #endregion
 63
 64         public CircleProgressbarcontrol()
 65         {
 66             InitializeComponent();
 67         }
 68
 69         #region 方法
 70
 71         /// <summary>
 72         /// 设置当前百分比
 73         /// </summary>
 74         /// <param name="d">百分比</param>
 75         public void setPercent(double d) {
 76             Storyboard sb = (Storyboard)this.Resources["MainStoryboard"];
 77             ((DoubleAnimationUsingKeyFrames)sb.Children[0]).KeyFrames[0].Value = ProgressArea.EndAngle;
 78             ((DoubleAnimationUsingKeyFrames)sb.Children[0]).KeyFrames[1].Value = d*3.6;
 79             sb.Begin();
 80         }
 81
 82         #endregion
 83
 84         #region 事件
 85
 86         //界面调整
 87         private void UserControl_Loaded(object sender, RoutedEventArgs e)
 88         {
 89             if (Double.IsNaN(Width))
 90             {
 91                 if (ActualWidth >= ActualHeight)
 92                 {
 93                     double t = (ActualWidth - ActualHeight) / 2;
 94                     MainBorder.Margin = new Thickness(t, 0, t, 0);
 95                     ProgressArea.Margin = new Thickness(t + 5, 5, t + 5, 5);
 96                     AreaShow.Margin = new Thickness(t + 10, 10, t + 10, 10);
 97                 }
 98                 else
 99                 {
100                     double t = (ActualHeight - ActualWidth) / 2;
101                     MainBorder.Margin = new Thickness(0, t + 0, 0, t + 0);
102                     ProgressArea.Margin = new Thickness(5, t + 5, 5, t + 5);
103                     AreaShow.Margin = new Thickness(10, t + 10, 10, t + 10);
104                 }
105                 AreaShow.FontSize = AreaShow.ActualWidth / 2;
106             }
107             else
108             {
109                 if (Width >= Height)
110                 {
111                     double t = (Width - Height) / 2;
112                     MainBorder.Margin = new Thickness(t, 0, t, 0);
113                     ProgressArea.Margin = new Thickness(t + 5, 5, t + 5, 5);
114                     AreaShow.Margin = new Thickness(t + 10, 10, t + 10, 10);
115                 }
116                 else
117                 {
118                     double t = (Height - Width) / 2;
119                     MainBorder.Margin = new Thickness(0, t, 0, t);
120                     ProgressArea.Margin = new Thickness(5, t + 5, 5, t + 5);
121                     AreaShow.Margin = new Thickness(10, t + 10, 10, t + 10);
122                 }
123                 AreaShow.FontSize = AreaShow.ActualWidth / 2;
124             }
125         }
126
127         #endregion
128     }
129 }

后台代码

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Globalization;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Windows.Data;
 7
 8 namespace MyUserControlLibrary
 9 {
10     /// <summary>
11     /// 将角度转化成百分比
12     /// </summary>
13     public class ConverterCircleToPercent:IValueConverter
14     {
15         public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
16         {
17             return (int)(double.Parse(value.ToString()) * 10 / 36);
18         }
19         public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
20         {
21             throw new NullReferenceException();
22         }
23     }
24 }

转换器

 

时间: 2024-09-11 00:01:45

小米视频加载进度条效果实现的相关文章

JS实现网页加载进度条实例

网页进度条能够更好的反应当前网页的加载进度情况,loading进度条可用动画的形式从开始0%到100%完成网页加载这一过程.但是目前的浏览器并没有提供页面加载进度方面的接口,也就是说页面还无法准确返回页面实际加载的进度,本文中我们使用jQuery来实现页面加载进度条效果. HTML 首先我们要知道的是,目前没有任何浏览器可以直接获取正在加载对象的大小.所以我们无法通过数据大小来实现0-100%的加载显示过程.因此我们需要通过html代码逐行加载的特性,在整页代码的若干个跳跃行数中设置节点,进行大

二款 js 图片预加载进度条(Mootools)

提供二款图片预加载进度条效果代码,可以对网站图片加载过慢时进行提供,这样可以增加用户体验哦,我们利用了一款js与mootools实例代码. <script> var l=0; var imgs; var sum=0; function chk(){   document.getelementbyid("aa").innertext=""+((sum-l)*100/sum)+"%"   l--;   if (l==0){     for

jquery实现加载进度条提示效果_jquery

本文实例讲述了jquery实现加载进度条提示效果代码.分享给大家供大家参考.具体如下: 运行效果截图如下: 具体代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>进度条</title> <script type="text/javascript" src="http://lib.sinaapp.co

Sys.ScriptLoader与JS加载进度条的实现

js|加载 今天有人问我,163邮箱那样的Javascript加载进度条是如何实现的. 我不知道,不过实现一个不难,因为<script />有onload和onreadystatechange.还有就是,我们有Atlas. Atlas中有个类:Sys.ScriptLoader,它的作用就是在页面中依次地加载多个Script文件.在实现之前,先来分析一下这个类的代码.   1Sys.ScriptLoader = function() {  2  3    // 所有Script的referenc

自己动手制作基于jQuery的Web页面加载进度条插件_jquery

静态效果的实现 网页顶部加载进度条,近年来很流行,很多网站都采用了这种加载方式.网上也有这样类似的插件,今天我们总结一下网页顶部线性页面加载进度条. 大体的写法如下: body{ margin:0; } #progress { position:fixed; height: 2px; background:#2085c5; transition:opacity 500ms linear } #progress.done { opacity:0 } #progress span { positio

pace.js页面加载进度条插件_javascript技巧

本文简单介绍插件pace.js. 在页面中引入Pace.js,页面就会自动监测你的请求(包括Ajax请求),在事件循环滞后,会在页面记录加载的状态以及进度情况.此插件的兼容性很好,可以兼容IE8以上的所有主流插件,而且其强大之处在于,你还可以引入加载进度条的主题样式,你可以选择任意颜色和多种动画效果(例如简约.闪光灯,MAC OSX,左侧填充,顶部填充,计数器和弹跳等等动画效果),如果你擅长修改css动画,那你就可以做出无限种可能性的动画,为你的网站增添个性化特色! 调用方法: 引入Pace.j

浅析JS异步加载进度条_javascript技巧

展现效果: 1) 当点击Load的时候,模拟执行异步加载. 浏览器被遮挡. 进度条出现. 实现思路: 1.当用户点击load button执行异步请求. 调用方法 出现加载条 2.怎么实现进度条呢? 1) 在document.body 新增一个div.覆盖浏览器. 设置背景会灰色. z-index = 999. 加载的时候让用户无法修改界面值 2) 在document.body 新增一个动态的div. 代码实现: Main.html: <!DOCTYPE html> <html>

混合开发(一)——WebView开发高级技巧之加载网页以及JavaScript,加载进度条

混合开发(一)--WebView开发高级技巧之加载网页以及JavaScript,加载进度条 现在关于混合开发也越来越多了,很多人喜欢跟随,比如HB,比如RN,其实这东西很早就有这么一个概念了,而且说实话,这方面的需求目前来讲,还是只针对一个别的应用的,不过日后会发展成什么样,那我就不知道了,不过在此之前,我们的WebView,还是用的比较多的,包括他浏览新闻,以及加载一些动作,也就是加载JS,这样的话,我们就可以拿出来讲一讲了,说真的,学习android也挺久的了,感觉很多东西,一出来的时候都哇

Android自定义View仿华为圆形加载进度条

View仿华为圆形加载进度条效果图 实现思路 可以看出该View可分为三个部分来实现 最外围的圆,该部分需要区分进度圆和底部的刻度圆,进度部分的刻度需要和底色刻度区分开来 中间显示的文字进度,需要让文字在View中居中显示 旋转的小圆点,小圆点需要模拟小球下落运动时的加速度效果,开始下落的时候慢,到最底部时最快,上来时速度再逐渐减慢 具体实现 先具体细分讲解,博客最后面给出全部源码 (1)首先为View创建自定义的xml属性 在工程的values目录下新建attrs.xml文件 <resourc