稳扎稳打Silverlight(37) - 3.0动画之Easing(缓动效果)

动画缓冲或叫缓动函数(Animation Easing) 阅读详情
[索引页]
[源码下载]


稳扎稳打Silverlight(37) - 3.0动画之Easing(缓动效果)


作者: webabcd


介绍
Silverlight 3.0 动画的缓动效果:
  • Easing 可以与 Storyboard 结合实现动画的缓动效果
  • Silverlight 3 内置 11 种缓动效果:分别为BackEase, BounceEase, CircleEase, CubicEase, ElasticEase, ExponentialEase, PowerEase, QuadraticEase, QuarticEase, QuinticEase, SineEase
  • 各个缓动类都继承自 EasingFunctionBase,除了 EasingFunctionBase 提供的功能外,各个缓动类可能还会有各自的属性(懒的写了,查文档吧) 
  • EasingFunctionBase 有一个用于设置缓动模式的枚举类型属性 EasingMode (EasingMode.EaseOut(默认值), EasingMode.EaseIn, EasingMode.EaseInOut)


在线DEMO
http://www.cnblogs.com/webabcd/archive/2009/08/04/1538238.html


示例
1、Silverlight 3.0 内置的 11 种缓动效果的 Demo
Easing.xaml
< navigation:Page  x:Class ="Silverlight30.Animation.Easing"  
           xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
           xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"  
           xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable
="d"
           xmlns:navigation
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           d:DesignWidth
="640"  d:DesignHeight ="480"
           Title
="Easing Page" >
    
< Grid  x:Name ="LayoutRoot" >
        
< StackPanel  Orientation ="Horizontal"  HorizontalAlignment ="Left" >

            
<!-- 用于显示各种 Easing 的图例列表 -->
            
< StackPanel  Margin ="10" >
                
< ListBox  x:Name ="lstEasing" >
                    
< ListBox.ItemTemplate >
                        
< DataTemplate >
                            
< StackPanel  Margin ="1" >
                                
< TextBlock  Text =" {Binding EasingName} "   />
                                
< Image  Source =" {Binding PicAddress} "  Width ="300"  Height ="50"   />
                            
</ StackPanel >
                        
</ DataTemplate >
                    
</ ListBox.ItemTemplate >
                
</ ListBox >
            
</ StackPanel >

            
< StackPanel  Margin ="10, 200" >
           
                
<!-- 分别用 3 种动画来演示各类 Easing -->
                
< ComboBox  x:Name ="cboTransform"  Margin ="5" >
                    
< ComboBoxItem  Content ="Translate"  IsSelected ="True"   />
                    
< ComboBoxItem  Content ="Rotate"   />
                    
< ComboBoxItem  Content ="Scale"   />
                
</ ComboBox >
                
                
<!-- 用各种 EasingMode 分别做演示 -->
                
< ComboBox  x:Name ="cboEasingMode"  Margin ="5" >
                    
< ComboBoxItem  Content ="EaseOut"  IsSelected ="True"   />
                    
< ComboBoxItem  Content ="EaseIn"   />
                    
< ComboBoxItem  Content ="EaseInOut"   />
                
</ ComboBox >

                
< Button  x:Name ="btnShow"  Content ="演示"  Click ="btnShow_Click"  Margin ="5"   />

                
<!-- 用于做动画演示的矩形 -->
                
< Rectangle  x:Name ="rect"  Fill ="Blue"  Width ="200"  Height ="40"  Margin ="5"  RenderTransformOrigin ="0.5,0.5" >
                    
< Rectangle.RenderTransform >
                        
< TransformGroup >
                            
< TranslateTransform  x:Name ="tt"  X ="0"  Y ="0"   />
                            
< RotateTransform  x:Name ="rt"  Angle ="0"   />
                            
< ScaleTransform  x:Name ="st"  ScaleX ="1"  ScaleY ="1"   />
                        
</ TransformGroup >
                    
</ Rectangle.RenderTransform >
                
</ Rectangle >

            
</ StackPanel >
        
</ StackPanel >
    
</ Grid >
</ navigation:Page >

Easing.xaml.cs
/*
 * Easing - 与 Storyboard 结合实现动画的缓动效果
 * Silverlight 3 内置 11 种缓动效果:分别为BackEase, BounceEase, CircleEase, CubicEase, ElasticEase, ExponentialEase, PowerEase, QuadraticEase, QuarticEase, QuinticEase, SineEase
 * 各个缓动类都继承自 EasingFunctionBase,除了 EasingFunctionBase 提供的功能外,各个缓动类可能还会有各自的属性(懒的写了,查文档吧)
 * EasingFunctionBase 有一个用于设置缓动模式的枚举类型属性 EasingMode (EasingMode.EaseOut(默认值), EasingMode.EaseIn, EasingMode.EaseInOut)
 
*/


using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;
using  System.Windows.Navigation;

using  Silverlight30.Model;
using  System.Xml.Linq;

namespace  Silverlight30.Animation
{
    
public partial class Easing : Page
    
{
        
public Easing()
        
{
            InitializeComponent();

            
this.Loaded += new RoutedEventHandler(Easing_Loaded);
        }


        
// 绑定各种 Easing 的图例列表
        void Easing_Loaded(object sender, RoutedEventArgs e)
        
{
            XElement root 
= XElement.Load("Animation/Easing.xml");
            var easings 
= from n in root.Elements("easing")
                          select 
new EasingModel
                          
{
                              EasingName 
= (string)n.Attribute("EasingName"),
                              Description 
= (string)n.Attribute("Description"),
                              PicAddress 
= (string)n.Attribute("PicAddress")
                          }
;

            lstEasing.ItemsSource 
= easings;
            lstEasing.SelectedIndex 
= 0;
        }


        
private Storyboard _prevStoryboard;

        
private void btnShow_Click(object sender, RoutedEventArgs e)
        
{
            
if (_prevStoryboard != null)
                _prevStoryboard.Stop();

            
// 实例化用户所选择的 Easing
            Type type = typeof(EasingFunctionBase).Assembly.GetType("System.Windows.Media.Animation." + ((EasingModel)lstEasing.SelectedItem).EasingName, false);
            EasingFunctionBase easing 
= Activator.CreateInstance(type) as EasingFunctionBase;

            
// 根据用户的选择,设置 Easing 的 EasingMode 属性
            easing.EasingMode = (EasingMode)Enum.Parse(typeof(EasingMode), ((ComboBoxItem)cboEasingMode.SelectedItem).Content.ToString(), true);

            Storyboard sb 
= new Storyboard();
            _prevStoryboard 
= sb;

            var transformType 
= ((ComboBoxItem)cboTransform.SelectedItem).Content.ToString();
            
switch (transformType)
            
{
                
// 位移动画结合 Easing 的演示
                case "Translate":
                    DoubleAnimation daTranslateY 
= new DoubleAnimation();
                    daTranslateY.From 
= 0 ;
                    daTranslateY.To 
= 200;
                    daTranslateY.Duration 
= TimeSpan.FromSeconds(3);

                    daTranslateY.EasingFunction 
= easing;

                    Storyboard.SetTargetProperty(daTranslateY, 
new PropertyPath("Y"));
                    Storyboard.SetTarget(daTranslateY, tt);

                    sb.Children.Add(daTranslateY);

                    
break;
                
// 缩放动画结合 Easing 的演示
                case "Scale":
                    DoubleAnimation daScaleX 
= new DoubleAnimation();
                    daScaleX.From 
= 1;
                    daScaleX.To 
= 2;
                    daScaleX.Duration 
= TimeSpan.FromSeconds(3);

                    DoubleAnimation daScaleY 
= new DoubleAnimation();
                    daScaleY.From 
= 1;
                    daScaleY.To 
= 2;
                    daScaleY.Duration 
= TimeSpan.FromSeconds(3);

                    daScaleX.EasingFunction 
= easing;
                    daScaleY.EasingFunction 
= easing;

                    Storyboard.SetTargetProperty(daScaleX, 
new PropertyPath("ScaleX"));
                    Storyboard.SetTarget(daScaleX, st);
                    Storyboard.SetTargetProperty(daScaleY, 
new PropertyPath("ScaleY"));
                    Storyboard.SetTarget(daScaleY, st);

                    sb.Children.Add(daScaleX);
                    sb.Children.Add(daScaleY);

                    
break;
                
// 旋转动画结合 Easing 的演示
                case "Rotate":
                    DoubleAnimation daAngle 
= new DoubleAnimation();
                    daAngle.To 
= 0;
                    daAngle.To 
= 360;
                    daAngle.Duration 
= TimeSpan.FromSeconds(3);

                    daAngle.EasingFunction 
= easing;

                    Storyboard.SetTargetProperty(daAngle, 
new PropertyPath("Angle"));
                    Storyboard.SetTarget(daAngle, rt);

                    sb.Children.Add(daAngle);

                    
break;
            }

   
            sb.Begin();
        }

    }

}



2、自定义缓动效果的 Demo
MyCustomEasing.cs
using  System;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Ink;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;

namespace  Silverlight30.Animation
{
    
/// <summary>
    
/// 自定义缓动效果
    
/// </summary>

    public class MyCustomEasing : EasingFunctionBase
    
{
        
public MyCustomEasing()
            : 
base()
        
{
 
        }


        
/// <summary>
        
/// 实现 EaseIn 模式下的逻辑
        
/// EaseOut 和 EaseInOut 会自动实现
        
/// </summary>
        
/// <param name="normalizedTime">标准时间位(0 - 1之间)。即 动画运行到此的时间 占 动画运行所需的全部时间 的百分比</param>
        
/// <returns></returns>

        protected override double EaseInCore(double normalizedTime)
        
{
            
// QuinticEase 效果的实现算法

            
// 假定动画运行的总共时间为 1 秒
            
// 那么当 normalizedTime 为 0.1 时,动画运行到的位置为无该缓动效果时,0.00001秒后的位置。以此类推
            return Math.Pow(normalizedTime, 5);
        }

    }

}


CustomEasing.xaml
< navigation:Page  x:Class ="Silverlight30.Animation.CustomEasing"  
           xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
           xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"  
           xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable
="d"
           xmlns:custom
="clr-namespace:Silverlight30.Animation"
           xmlns:navigation
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           d:DesignWidth
="640"  d:DesignHeight ="480"
           Title
="CustomEasing Page" >
    
< Grid  x:Name ="LayoutRoot" >
        
< StackPanel >
        
            
< StackPanel.Resources >
                
< Storyboard  x:Name ="ani" >
                    
< DoubleAnimation 
                        
Storyboard.TargetName ="tt"
                        Storyboard.TargetProperty
="Y"
                        From
="0"  
                        To
="200"  
                        Duration
="00:00:03"
                    
>
                        
< DoubleAnimation.EasingFunction >
                            
<!-- 使用自定义的缓动效果 -->
                            
< custom:MyCustomEasing  EasingMode ="EaseOut"   />
                        
</ DoubleAnimation.EasingFunction >
                    
</ DoubleAnimation >
                
</ Storyboard >
            
</ StackPanel.Resources >

            
< Button  x:Name ="btnShow"  Content ="演示"  Margin ="5"  Click ="btnShow_Click"   />

            
< Rectangle  x:Name ="rect"  Fill ="Blue"  Width ="200"  Height ="40"  Margin ="5"  RenderTransformOrigin ="0.5,0.5" >
                
< Rectangle.RenderTransform >
                    
< TransformGroup >
                        
< TranslateTransform  x:Name ="tt"  X ="0"  Y ="0"   />
                    
</ TransformGroup >
                
</ Rectangle.RenderTransform >
            
</ Rectangle >
            
        
</ StackPanel >
    
</ Grid >
</ navigation:Page >

CustomEasing.xaml.cs
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;
using  System.Windows.Navigation;

namespace  Silverlight30.Animation
{
    
public partial class CustomEasing : Page
    
{
        
public CustomEasing()
        
{
            InitializeComponent();
        }


        
private void btnShow_Click(object sender, RoutedEventArgs e)
        
{
            ani.Begin();
        }

    }

}



OK
[源码下载]
5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

相关推荐

三菱CNC数据采集实战:从环境搭建到代码实现的完整指南

本文提供了一份完整的三菱CNC数据采集实战指南,涵盖从开发环境搭建、核心SDK获取、网络配置到基于C#和A2协议的完整代码实现。文章详细解析了初始化、连接管理、数据获取与展示四大核心模块,并分享了错误处理、性能优化及与MES系统集成的关键技巧,帮助工程师快速构建稳定可靠的工业数据采集系统。

wood5的博客 886

动画缓冲或叫缓动函数 Animation Easing

动画缓冲或叫缓动函数 Animation Easing

jfdtygv的博客 1834

安卓直链APK安装拦截全解析:从Play Protect到厂商管控的应对指南

在移动应用分发领域,APK(Android Package)安装是开发者与用户交互的关键环节。其核心原理涉及安卓系统的安全沙箱机制与权限管理体系,旨在保护用户设备免受恶意软件侵害。这一机制的技术价值在于平衡了应用生态的开放性与安全性,但也在应用推广、企业内部分发等场景中带来了挑战。尤其在通过官网、广告等直链渠道分发APK时,常会遇到安装转化率骤降的问题。这背后主要受到Google Play Protect云端扫描、安卓系统安装权限模型演进(如Android 8.0+的安装源授权)以及设备制造商附加安全层(如

weixin_33894640的博客 467

稳扎稳打 Silverlight 3.0 系列文章索引

[源码下载]稳扎稳打 Silverlight 3.0 系列文章索引作者:webabcd在线DEMOhttp://www.cnblogs.com/webabcd/archive/2009/08/04/1538238.html1、稳扎稳打Silverlight(33) - 3.0控件之AutoCompleteBox, DataPager介绍S

webabcd的专栏 700

架构师成长之路(1)--什么是架构师

前言: 哲学家常思考的问题:" 我是谁?"" 我从哪里来?"" 要到哪里去?不只是哲学家,我想每个人都有自己对这三个问题的认知。 如果我们要成为架构师,我们自己要面临的三大问题: 找准自己定位:我是谁?在哪里? 怎样做好架构师:我要做什么? 如何搭建架构师知识体系:我该怎么做? 这里面就是做事方法论:目标(我要做什么),方法(计划)(我该怎么做), 执行/行动找准自己定位:我是谁?在哪里...

黄规速博客:学如逆水行舟,不进则退 6万+

手把手教你学Simulink——基于通信协议与标准的场景实例:卫星通信中的网络安全协议(IPSec)仿真

随着卫星通信在国防、金融、应急指挥、能源管网等关键领域的广泛应用,其安全性已成为系统设计的核心要求。然而,卫星链路具有广播特性、长距离传输、地面站分布广等特点,极易遭受窃听、篡改、重放、中间人攻击等网络威胁。传统的“信任链路层安全”已不足以应对现代网络攻击。为此,国际标准组织(如IETF、ETSI、CCSDS)推荐在卫星通信中部署协议,实现端到端的数据机密性、完整性、身份认证和抗重放保护。本文将手把手教你如何在中构建一个符合标准的仿真系统,涵盖从明文传输到加密隧道的完整安全链路建模。本文完整实现了。

MHD0815的博客 146

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 15

7.3 空间矢量调制(SVM)整数算法

本文提出了一种基于整数运算的空间矢量调制(SVM)优化实现方案,适用于计算资源有限的Cortex-M0平台。针对传统SVM算法中复杂的三角函数和浮点运算问题,重点优化了扇区判断和占空比计算两个关键环节。在扇区判断方面,采用基于电压分量符号和相对大小的三变量法,避免了角度计算;在占空比计算方面,通过几何关系将作用时间表示为电压分量的线性组合,并采用定点数实现。方案还详细讨论了系数定点化、死区补偿等实现细节,在保证精度的同时显著降低了计算复杂度。实验结果表明,优化后的整数算法在M0平台上仅需50-80个周期即可

技术工作者 942

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 437

科研绘图系列:R语言绘制极坐标饼图(pie plot)

科研绘图系列:R语言极坐标饼图(pie plot)

专注生信领域 1051

【SAP HANA 24】HANA与Oracle SQL语法对照表

HANA SQL参考及Oracle 语法对照

探索 Java 编程的技巧、最佳实践和解决方案。本博客提供针对 Java 开发者的实用指南,涵盖从基础到高级话题,旨在提升编程效率和技能。 1421

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 362

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 78

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

AI和大模型—从克里金算法说开去

克里金算法源于矿业勘探,通过空间自相关性实现稀疏数据下的最优预测,核心优势在于不确定性量化。在AI大模型中,其等价于高斯过程,广泛应用于超参数优化、小样本建模与推理调度。尽管面临计算复杂度高、核函数选择难等问题,通过稀疏化、分治法与低秩近似可有效优化。该方法在降低训练成本、提升泛化能力及减少幻觉方面表现突出,尤其适用于高维、高成本的智能系统优化,具有重要借鉴价值。

fpcc的专栏 602

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 176

算法札记:几何分布在算法题UVA1262的运用

集卡问题求解核心:将集齐n种优惠券的过程分为n个阶段,每个阶段期望购买次数为 $ \frac{n}{k} $(k为剩余种类数),总期望为 $ n \cdot H_n $(调和数)。通过自洽方程推导单阶段期望,无需几何分布或无穷级数,逻辑清晰且适用于大一水平。例如,n=5时期望约11.42,非5。题目要求以带分数形式输出精确结果,算法上需累加分数并化简。

Keven_11的博客 308

不同的二叉搜索树

互不相同的二叉搜索树的种数,以 j (1<=j<=i)为头节点,左子树是 j-1 个数,右子树就是 i - (j - 1) -1 = i - j个数。所以dp[3] = dp[0] * dp[2] + dp[1] * dp[1] + dp[2] * dp[0]头1 = 左子树0节点 * 右子树2节点,二叉搜索树就是排序树,左子树<根节点<右子树,左右子树也满足左子树<根节点<右子树。头2 = 左子树1节点 * 右子树1节点。所以dp[i] += dp[j-1] * dp[i-j]个节点组成且节点值从。

qq_44721738的博客 150

SSL证书选RSA还是ECDSA:公钥算法、CA签名与兼容性怎么核对

申请SSL证书时,RSA和ECDSA该怎么选?先分清站点公钥算法、CA签名算法和TLS实际兼容性,再用隔离OpenSSL实验读取两类材料,核对申请、续期和部署交接,避免只看Signature Algorithm就选错。

谁呀!的博客 381

固件开发岗算法

背景:嵌入式固件岗,偏爱手写库函数、位运算、数组基础算法。

2502_90352018的博客 109
上一篇: 稳扎稳打Silverlight(36) - 3.0控件之TreeView, ListBox增强, DataGrid增强, MediaElement增强
下一篇: 稳扎稳打Silverlight(38) - 3.0滤镜之BlurEffect, DropShadowEffect, 自定义滤镜, 3D效果之PlaneProjection, 位图API之WriteableBitmap
webabcd
博客等级 码龄17年 28粉丝 911原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值