zoukankan      html  css  js  c++  java
  • 小米视频加载进度条效果实现

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

    好吧 其实没什么技术含量 直接上代码好了 和我上一篇利用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 }
    转换器
  • 相关阅读:
    W3C规范
    背景图片调整大小
    comfirm和prompt的区别
    position属性absolute与relative 的区别
    text-decoration和text-indent和text-shadow
    刷新网页跳转锚点
    安卓中location.href或者location.reload 不起作用
    $_SERVER 当前信息
    堆+思维——cf1330E
    树形dp——cf1332F【好题】
  • 原文地址:https://www.cnblogs.com/lgmbk/p/5050448.html
Copyright © 2011-2022 走看看