animation的知识点分类

本文深入探讨了动画在Android应用开发中的作用,包括帧动画、间补动画和属性动画的实例化与分类。详细介绍了帧动画、间补动画(如AlphaAnimation、RotateAnimation等)和属性动画(如ValueAnimator、ObjectAnimator)的实现方法。同时,解释了Interpolator的作用、Transformation在动画中的应用、帧数与动画流畅性的关系。还覆盖了如何在Android中播放GIF文件、结束动画的方法、如何实现多个View的整体动画及全局activity动画的配置。文章最后提供了通过配置文件实现各种动画的示例,旨在帮助开发者深入了解并熟练运用动画技术,提升应用的用户体验。

1. 动画有什么用

2. animation如何实例化(new,或xml配置animationutil.load())

3. animation的分类(按动画素材分,帧动画,间补动画;按启动对象分:窗口动画,视图动画)


1) 帧动画 frame anim:AnimationDrawable      配置xml文件  animation-list  1.1)animation自定义 重写方法 applyTransformation() 改变

Transformation


2) 间补动画 tween anim:  AlphaAnimation , RotateAnimation, ScaleAnimation, TranslateAnimation 配置xml文件 alpha, rotate, scale, translate


3) 属性动画property anim: 

3.1) valueAnimator  addupdateListener() {  属性改变 }  

3.2) objectAnimator  

3.2.1) 属性 xxx   

3.2.2) setX() , getX()  

3.2.3) _offx 实例化

3.3) offint , offfloat, offobject, offproperty , propertyvalueHolder, setCurrentPlayTime(long playTime)


4) interpolator      帧动画 间补动画  android.view.animation.Interpolator在view包下,  属性动画 android.animation.TimeInterpolator 在animation包下

4.0 之后 Interpolator 继承自TimeInterpolator


4.animation的原理

5.如何播放gif 文件

6.如何结束动画。

view.clearAnimation()

7.如何做多个view的整体动画。

用container view  startAnimation();


8. 

Interpolator 的作用 

动画的变化频率  ( ~0  ----  ~1)相当于加速度 a

根据系统 SystemClock.uptimeMillis() (每次调用都获取)

计算出在(0 ~ duration ) 哪个时间点

再计算出normalizedTime (0 ~ 1)百分比

input 为 normalizedTime(0~ 1)

input 为 delta time / duration (0 ~ 1)

getInterpolation(float input)


9.

Transformation 作用

animation中通过applyTransformation() 来改变transformation 来作动画


10. 关于帧数

游戏一般到60 帧才流畅。 animator 睡眠时间是10ms 即100帧每秒。这个帧数可以调节

静态方法ValueAnimator.setFrameDelay(long frameDelay)


11.TypeEvaluator 作用 

根据Interpolator 计算出的fraction 和初始 、结束值来计算view 的属性值。

默认是 IntEvaluator 和 FloatEvaluator


12 window 动画 

setWindowAnimations() 只能有显示动画

activity overridePendingTransition(enterAnim, exitAnim) 可以设置出入动画

去掉activity间切换动画

findViewById(R.id.button2).setOnClickListener(new OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        Intent intent = new Intent(OneActivity.this, TwoActivity.class);
        startActivity(intent );
        overridePendingTransition(0, 0);//去掉Activity切换间的动画
    }
});


启动动画

startActivity(new Intent(A.this, B.class));
overridePendingTransition(inAnim, outAnim);


结束动画

finish();
activity.overridePendingTransition(inAnim, outAnim);


全局activity动画

<style name="Theme.Test" parent="@android:style/Theme.Light.NoTitleBar">
    <item name="android:windowAnimationStyle">@style/Animation.Activity.Test</item>
</style>

<style name="Animation.Activity.Test" parent="@android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@anim/activity_open_enter</item>
    <item name="android:activityOpenExitAnimation">@anim/activity_open_exit</item>
    <item name="android:activityCloseEnterAnimation">@anim/activity_close_enter</item>
    <item name="android:activityCloseExitAnimation">@anim/activity_close_exit</item>
           
    <item name="android:taskOpenEnterAnimation">@anim/activity_open_enter</item>
    <item name="android:taskOpenExitAnimation">@anim/activity_open_exit</item>
    <item name="android:taskCloseEnterAnimation">@anim/activity_close_enter</item>
    <item name="android:taskCloseExitAnimation">@anim/activity_close_exit</item>
           
    <item name="android:taskToFrontEnterAnimation">@anim/activity_open_enter</item>
    <item name="android:taskToFrontExitAnimation">@anim/activity_open_exit</item>
    <item name="android:taskToBackEnterAnimation">@anim/activity_close_enter</item>
    <item name="android:taskToBackExitAnimation">@anim/activity_close_exit</item>
</style>


android tween动画 配置文件知识点:


alpha 

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator">
    <!-- fromAlpha和toAlpha是起始透明度和结束时透明度 -->
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.0"
        android:startOffset="500"
        android:duration="500"/>
</set>


rotate

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator">
    <!--
        fromDegrees:开始的角度
        toDegrees:结束的角度,+表示是正的
        当角度为负数——表示逆时针旋转
        当角度为正数——表示顺时针旋转
        pivotX:用于设置旋转时的x轴坐标
        例
           1)当值为"50",表示使用绝对位置定位
           2)当值为"50%",表示使用相对于控件本身定位
           3)当值为"50%p",表示使用相对于控件的父控件定位
        pivotY:用于设置旋转时的y轴坐标
      -->
    <rotate
        android:fromDegrees="0"
        android:toDegrees="+360"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="1000"/>
</set>



scale

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator">
   <!--
       起始x轴坐标
           止x轴坐标
           始y轴坐标
           止y轴坐标
           轴的坐标
           轴的坐标
     -->
   <scale
       android:fromXScale="1.0"
       android:toXScale="0.0"
       android:fromYScale="1.0"
       android:toYScale="0.0"
       android:pivotX="50%"
       android:pivotY="50%"
       android:duration="1000"/>
</set>


translate

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator">
    <!--
           始x轴坐标
           止x轴坐标
           始y轴坐标
           止y轴坐标
      -->
    <translate
        android:fromXDelta="0%"
        android:toXDelta="100%"
        android:fromYDelta="0%"
        android:toYDelta="100%"
        android:duration="2000"/>
</set>

3种动画都可以通过配置文件来实现。

 

帧动画:

setBackground() 即可


间补动画:

AnimationUtils.loadAnimation(context,R.anim.x);


属性动画:

AnimatorInflater.loadAnimator(context, R.anim.x);





Matplotlib 是 Python 中一个功能强大的绘图库,广泛用于数据可视化领域。它提供了多种函数和工具,可以绘制各种类型的图表,并支持丰富的样式设置和图形定制。以下是 Matplotlib 库中的一些常用函数及相关知识点总结: ### 图形绘制基础 Matplotlib 的核心模块是 `pyplot`,通常以 `plt` 别名导入。基本的绘图流程包括创建图形、添加子图、绘制数据、设置标签和标题等。 ```python import matplotlib.pyplot as plt import numpy as np # 生成数据 x = np.linspace(0, 10, 100) y = np.sin(x) # 创建图形和坐标轴 fig, ax = plt.subplots() # 绘制曲线 ax.plot(x, y, label='sin(x)', color='blue', linestyle='--', linewidth=2) # 设置标题和坐标轴标签 ax.set_title('Sine Wave') ax.set_xlabel('X-axis') ax.set_ylabel('Y-axis') # 显示图例 ax.legend() # 显示图形 plt.show() ``` ### 常用绘图函数 - **`plot()`**:用于绘制折线图,是最常用的绘图函数之一。可以通过参数控制线条颜色、样式、宽度等[^2]。 - **`scatter()`**:用于绘制散点图,展示两个变量之间的关系。可以设置点的颜色、大小、形状等属性[^4]。 - **`bar()` 和 `barh()`**:分别用于绘制垂直柱状图和水平柱状图。常用于分类数据的比较。 - **`hist()`**:用于绘制直方图,展示数据的分布情况。 - **`pie()`**:用于绘制饼图,显示各部分的比例关系。 - **`imshow()`**:用于显示图像或二维数组数据,常用于热力图的绘制。 - **`contour()` 和 `contourf()`**:用于绘制等高线图和填充等高线图,适用于三维数据的二维表示。 - **`errorbar()`**:用于绘制带有误差棒的图表,适用于需要展示不确定性的场景。 - **`boxplot()`**:用于绘制箱型图,展示数据的统计特性,如中位数、四分位数等。 ### 图形元素设置 - **标题和标签**: - `set_title()`:设置子图的标题。 - `set_xlabel()` 和 `set_ylabel()`:分别设置 x 轴和 y 轴的标签。 - **图例**: - `legend()`:显示图例,帮助识别不同数据系列。可以在绘图时通过 `label` 参数指定图例名称。 - **网格线**: - `grid(True)`:显示网格线,便于读取数据点。 - **注释**: - `annotate()`:用于在图中添加注释文本。可以通过参数指定被注释的位置和插入文本的位置,并可添加箭头指向目标位置[^3]。 - **坐标轴范围**: - `xlim()` 和 `ylim()`:分别设置 x 轴和 y 轴的显示范围。 - **刻度设置**: - `xticks()` 和 `yticks()`:用于设置坐标轴的刻度值和标签。 ### 样式与美化 Matplotlib 提供了多种方式来美化图表,提升视觉效果: - **内置样式**: - 使用 `plt.style.use()` 可以应用 Matplotlib 内置的样式表,例如 `'ggplot'`、`'seaborn'` 等,快速改变图表的整体外观[^1]。 - **第三方库**: - `qbstyles`、`matplotx` 和 `mplcyberpunk` 等第三方库提供了更多样化的风格选项,能够进一步增强图表的美观程度[^1]。 - **自定义样式**: - 可以手动调整线条颜色、样式、标记等细节,甚至修改全局默认设置(如字体、背景色)以满足特定需求。 ### 子图布局 Matplotlib 支持在同一画布上绘制多个子图,使用 `subplots()` 函数可以轻松创建多行多列的子图结构。每个子图都可以独立进行绘图和设置。 ```python fig, axs = plt.subplots(2, 2, figsize=(10, 8)) axs[0, 0].plot(x, np.sin(x), 'r') axs[0, 0].set_title('Sine') axs[0, 1].plot(x, np.cos(x), 'g') axs[0, 1].set_title('Cosine') axs[1, 0].plot(x, np.tan(x), 'b') axs[1, 0].set_title('Tangent') axs[1, 1].plot(x, np.exp(x), 'k') axs[1, 1].set_title('Exponential') plt.tight_layout() plt.show() ``` ### 动态交互与保存 - **交互模式**: - 在 Jupyter Notebook 中,可以直接调用 `%matplotlib inline` 或 `%matplotlib notebook` 来启用内联或交互式绘图模式。 - **保存图形**: - 使用 `savefig()` 函数可以将图形保存为文件,支持多种格式(如 PNG、PDF、SVG 等)。可以通过参数指定分辨率、透明度等选项。 ### 高级功能 - **动画**: - 使用 `animation` 模块可以创建动态图表,适合展示随时间变化的数据。 - **3D 绘图**: - 通过 `mplot3d` 工具包,Matplotlib 支持三维图表的绘制,包括 3D 曲线、曲面等。 - **地理空间数据可视化**: - 结合 `Basemap` 或 `Cartopy` 等库,可以绘制地图并叠加地理数据。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值