Android复习(二)应用资源 --> 动画
没什么好总结的 复制自 https://developer.android.google.cn/guide/topics/resources/animation-resource 有需要的可以查看官方文档
动画资源
一个动画资源可以定义以下两种动画类型之一:
- 属性动画
- 通过使用
Animator
在设定的时间段内修改对象的属性值来创建动画。 - 视图动画
-
使用视图动画框架可以创建两种类型的动画:
- 补间动画:通过使用
Animation
对单张图片执行一系列转换来创建动画 - 帧动画:通过使用
AnimationDrawable
按顺序显示一系列图片来创建动画。
- 补间动画:通过使用
属性动画
在 XML 中定义的动画,用于在设定的一段时间内修改目标对象的属性,例如背景颜色或 Alpha 值。
- 文件位置:
res/animator/filename.xml
该文件名将用作资源 ID。- 编译后的资源数据类型:
- 指向
ValueAnimator
、ObjectAnimator
或AnimatorSet
的资源指针。 - 资源引用:
- 在 Java 或 Kotlin 代码中:
R.animator.filename
在 XML 中:@[package:]animator/filename
- 语法:
-
<set
android:ordering=["together" | "sequentially"]> <objectAnimator
android:propertyName="string"
android:duration="int"
android:valueFrom="float | int | color"
android:valueTo="float | int | color"
android:startOffset="int"
android:repeatCount="int"
android:repeatMode=["repeat" | "reverse"]
android:valueType=["intType" | "floatType"]/> <animator
android:duration="int"
android:valueFrom="float | int | color"
android:valueTo="float | int | color"
android:startOffset="int"
android:repeatCount="int"
android:repeatMode=["repeat" | "reverse"]
android:valueType=["intType" | "floatType"]/> <set>
...
</set>
</set>
该文件必须具有一个根元素,可以是
<set>
、<objectAnimator>
或<valueAnimator>
。您可以将动画元素(包括其他<set>
元素)组合到<set>
元素中。 - 元素:
-
<set>
- 容纳其他动画元素(
<objectAnimator>
、<valueAnimator>
或其他<set>
元素)的容器。代表AnimatorSet
。您可以指定嵌套的
<set>
标记来将动画进一步组合在一起。每个<set>
都可以定义自己的ordering
属性。属性:
android:ordering
- 关键字。指定此集合中动画的播放顺序。
值 说明 sequentially
依序播放此集合中的动画 together
(默认)同时播放此集合中的动画。
<objectAnimator>
- 在特定的一段时间内为对象的特定属性创建动画。代表
ObjectAnimator
。属性:
android:propertyName
- 字符串。必需。要添加动画的对象属性,通过其名称引用。例如,您可以为 View 对象指定
"alpha"
或"backgroundColor"
。 但是,objectAnimator
元素不包含target
属性,因此您无法在 XML 声明中设置要添加动画的对象。您必须通过调用loadAnimator()
来扩充您的动画 XML 资源,然后调用setTarget()
来设置包含此属性的目标对象。 android:valueTo
- 浮点数、整数或颜色。必需。动画属性的结束值。颜色以六位十六进制数字表示(例如,#333333)。
android:valueFrom
- 浮点数、整数或颜色。动画属性的开始值。如果未指定,则动画将从属性的 get 方法获得的值开始。颜色以六位十六进制数字表示(例如,#333333)。
android:duration
- 整数。动画的时间,以毫秒为单位。默认为 300 毫秒。
android:startOffset
- 整数。调用
start()
后动画延迟的毫秒数。 android:repeatCount
- 整数。动画的重复次数。设为
"-1"
表示无限次重复,也可设为正整数。例如,值"1"
表示动画在初次播放后重复播放一次,因此动画总共播放两次。默认值为"0"
,表示不重复。 android:repeatMode
- 整数。动画播放到结尾处的行为。
android:repeatCount
必须设置为正整数或"-1"
,该属性才有效。设置为"reverse"
可让动画在每次迭代时反向播放,设置为"repeat"
则可让动画每次从头开始循环播放。 android:valueType
- 关键字。如果值为颜色,则不要指定此属性。动画框架会自动处理颜色值
值 说明 intType
指定动画值为整数 floatType
(默认)指定动画值为浮点数
<animator>
在指定的时间段内执行动画。代表 ValueAnimator
。
属性:
android:valueTo
浮点数、整数或颜色。必需。动画的结束值。颜色以六位十六进制数字表示(例如,#333333)。android:valueFrom
浮点数、整数或颜色。必需。动画的开始值。颜色以六位十六进制数字表示(例如,#333333)。android:duration
整数。动画的时间,以毫秒为单位。默认为 300ms。android:startOffset
整数。调用 start()
后动画延迟的毫秒数。。android:repeatCount
整数。动画的重复次数。设为 "-1"
表示无限次重复,也可设为正整数。例如,值 "1"
表示动画在初次播放后重复播放一次,因此动画总共播放两次。默认值为 "0"
,表示不重复。android:repeatMode
整数。动画播放到结尾处的行为。android:repeatCount
必须设置为正整数或 "-1"
,该属性才有效。设置为 "reverse"
可让动画在每次迭代时反向播放,设置为 "repeat"
则可让动画每次从头开始循环播放。android:valueType
关键字。如果值为颜色,则不要指定此属性。动画框架会自动处理颜色值。
值 | 说明 |
---|---|
intType |
指定动画值为整数 |
floatType (默认) |
指定动画值为浮点数 |
示例:保存在 res/animator/property_animator.xml
的 XML 文件:
<set android:ordering="sequentially">
<set>
<objectAnimator
android:propertyName="x"
android:duration="500"
android:valueTo="400"
android:valueType="intType"/>
<objectAnimator
android:propertyName="y"
android:duration="500"
android:valueTo="300"
android:valueType="intType"/>
</set>
<objectAnimator
android:propertyName="alpha"
android:duration="500"
android:valueTo="1f"/>
</set>
为了运行此动画,您必须将代码中的 XML 资源扩充为 AnimatorSet
对象,然后在开始运行动画集之前为所有动画设置目标对象。为方便起见,调用 setTarget()
即可设置一个用于 AnimatorSet
的所有子项的目标对象。以下代码展示了如何执行此操作:
java代码: AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
R.animator.property_animator);
set.setTarget(myObject);
set.start(); kotlin代码: val set: AnimatorSet = AnimatorInflater.loadAnimator(myContext, R.animator.property_animator)
.apply {
setTarget(myObject)
start()
}
另请参阅:
视图动画
视图动画框架可支持补间动画和逐帧动画,两者都可以在 XML 中声明。以下几个部分介绍如何使用这两种方法。
补间动画
在 XML 中定义的动画,用于对图形执行旋转、淡出、移动和拉伸等转换。
- 文件位置:
res/anim/filename.xml
该文件名将用作资源 ID。- 编译后的资源数据类型:
- 指向
Animation
的资源指针。 - 资源引用:
- 在 Java 中:
R.anim.filename
在 XML 中:@[package:]anim/filename
- 语法:
-
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@[package:]anim/interpolator_resource"
android:shareInterpolator=["true" | "false"] >
<alpha
android:fromAlpha="float"
android:toAlpha="float" />
<scale
android:fromXScale="float"
android:toXScale="float"
android:fromYScale="float"
android:toYScale="float"
android:pivotX="float"
android:pivotY="float" />
<translate
android:fromXDelta="float"
android:toXDelta="float"
android:fromYDelta="float"
android:toYDelta="float" />
<rotate
android:fromDegrees="float"
android:toDegrees="float"
android:pivotX="float"
android:pivotY="float" />
<set>
...
</set>
</set>
该文件必须具有一个根元素,可以是
<alpha>
、<scale>
、<translate>
、<rotate>
或包含一组(或多组)其他动画元素(甚至是嵌套的<set>
元素)的<set>
元素。 - 元素:
-
<set>
- 容纳其他动画元素(
<alpha>
、<scale>
、<translate>
、<rotate>
)或其他<set>
元素的容器。代表AnimationSet
。属性:
android:interpolator
- 插值器资源。 要应用于动画的
Interpolator
。 该值必须是对指定插值器的资源的引用(而不是插值器类名称)。您可以使用平台提供的默认插值器资源,也可以创建自己的插值器资源。有关插值器的详细信息,请参阅以下说明。 android:shareInterpolator
- 布尔值。如果要在所有子元素中共用同一插值器,则为“true”。
<alpha>
- 淡入或淡出动画。代表
AlphaAnimation
。属性:
android:fromAlpha
- 浮点数。起始不透明度偏移,0.0 表示透明,1.0 表示不透明。
android:toAlpha
- 浮点数。结束不透明度偏移,0.0 表示透明,1.0 表示不透明。
要了解
<alpha>
支持的更多属性,请参阅Animation
类引用(其中所有 XML 属性均由此元素继承)。 <scale>
- 大小调整动画。您可以通过指定
pivotX
和pivotY
,来指定图片向外(或向内)扩展的中心点。例如,如果这两个值为 0、0(左上角),则所有扩展均向右下方向进行。代表ScaleAnimation
。属性:
android:fromXScale
- 浮点数。起始 X 尺寸偏移,其中 1.0 表示不变。
android:toXScale
- 浮点数。结束 X 尺寸偏移,其中 1.0 表示不变。
android:fromYScale
- 浮点数。起始 Y 尺寸偏移,其中 1.0 表示不变。
android:toYScale
- 浮点数。结束 Y 尺寸偏移,其中 1.0 表示不变。
android:pivotX
- 浮点数。在对象缩放时要保持不变的 X 坐标。
android:pivotY
- 浮点数。在对象缩放时要保持不变的 Y 坐标。
要了解
<scale>
支持的更多属性,请参阅Animation
类引用(其中所有 XML 属性均由此元素继承)。 <translate>
- 垂直和/或水平移动。支持采用以下三种格式之一的以下属性:从 -100 到 100 的以“%”结尾的值,表示相对于自身的百分比;从 -100 到 100 的以“%p”结尾的值,表示相对于其父项的百分比;不带后缀的浮点值,表示绝对值。代表
TranslateAnimation
。属性:
android:fromXDelta
- 浮动数或百分比。起始 X 偏移。表示方式:相对于正常位置的像素数(例如
"5"
),相对于元素宽度的百分比(例如"5%"
),或相对于父项宽度的百分比(例如"5%p"
)。 android:toXDelta
- 浮动数或百分比。结束 X 偏移。表示方式:相对于正常位置的像素数(例如
"5"
),相对于元素宽度的百分比(例如"5%"
),或相对于父项宽度的百分比(例如"5%p"
)。 android:fromYDelta
- 浮动数或百分比。起始 Y 偏移。表示方式:相对于正常位置的像素数(例如
"5"
),相对于元素高度的百分比(例如"5%"
),或相对于父项高度的百分比(例如"5%p"
)。 android:toYDelta
- 浮动数或百分比。结束 Y 偏移。表示方式:相对于正常位置的像素数(例如
"5"
),相对于元素高度的百分比(例如"5%"
),或相对于父项高度的百分比(例如"5%p"
)。
要了解
<translate>
支持的更多属性,请参阅Animation
类引用(其中所有 XML 属性均由此元素继承)。 <rotate>
- 旋转动画。代表
RotateAnimation
。属性:
android:fromDegrees
- 浮点数。起始角度位置,以度为单位。
android:toDegrees
- 浮点数。结束角度位置,以度为单位。
android:pivotX
- 浮动数或百分比。旋转中心的 X 坐标。表示方式:相对于对象左边缘的像素数(例如
"5"
),相对于对象左边缘的百分比(例如"5%"
),或相对于父级容器左边缘的百分比(例如"5%p"
)。 android:pivotY
- 浮点数或百分比。旋转中心的 Y 坐标。表示方式:相对于对象上边缘的像素数(例如
"5"
),相对于对象上边缘的百分比(例如"5%"
),或相对于父级容器上边缘的百分比(例如"5%p"
)。
要了解
<rotate>
支持的更多属性,请参阅Animation
类引用(其中所有 XML 属性均由此元素继承)。
- 示例:
- 保存在
res/anim/hyperspace_jump.xml
的 XML 文件:<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<scale
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="1.0"
android:toXScale="1.4"
android:fromYScale="1.0"
android:toYScale="0.6"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:duration="700" />
<set
android:interpolator="@android:anim/accelerate_interpolator"
android:startOffset="700">
<scale
android:fromXScale="1.4"
android:toXScale="0.0"
android:fromYScale="0.6"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="400" />
<rotate
android:fromDegrees="0"
android:toDegrees="-45"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="400" />
</set>
</set>以下应用代码会将动画应用到
ImageView
并启动动画:java 代码: ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump); kotlin 代码: val image: ImageView = findViewById(R.id.image)
val hyperspaceJump: Animation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump)
image.startAnimation(hyperspaceJump) - 另请参阅:
插值器
插值器是在 XML 中定义的动画修改器,它会影响动画的变化率。插值器可对现有的动画效果执行加速、减速、重复、退回等。
插值器通过 android:interpolator
属性应用于动画元素,该属性的值是对插值器资源的引用。
Android 中提供的所有插值器都是 Interpolator
类的子类。为便于您使用 android:interpolator
属性将插值器应用于动画,Android 针对每个插值器类包含了一个可供您引用的公共资源。下表指定了每个插值器要使用的资源:
插值器类 | 资源 ID |
---|---|
AccelerateDecelerateInterpolator |
@android:anim/accelerate_decelerate_interpolator |
AccelerateInterpolator |
@android:anim/accelerate_interpolator |
AnticipateInterpolator |
@android:anim/anticipate_interpolator |
AnticipateOvershootInterpolator |
@android:anim/anticipate_overshoot_interpolator |
BounceInterpolator |
@android:anim/bounce_interpolator |
CycleInterpolator |
@android:anim/cycle_interpolator |
DecelerateInterpolator |
@android:anim/decelerate_interpolator |
LinearInterpolator |
@android:anim/linear_interpolator |
OvershootInterpolator |
@android:anim/overshoot_interpolator |
您可以通过以下方式使用 android:interpolator
属性应用上述某个插值器:
<set android:interpolator="@android:anim/accelerate_interpolator">
...
</set>
自定义插值器
如果您对平台提供的插值器(在上表中列出)不满意,则可以使用修改过的属性创建自定义插值器资源。例如,您可以调整 AnticipateInterpolator
的加速率或调整 CycleInterpolator
的循环次数。为此,您需要在 XML 文件中创建自己的插值器资源。
- 文件位置:
res/anim/filename.xml
该文件名将用作资源 ID。- 编译后的资源数据类型:
- 指向相应插值器对象的资源指针。
- 资源引用:
- 在 XML 中:
@[package:]anim/filename
- 语法:
-
<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
android:attribute_name="value"
/>如果您不应用任何属性,则您的插值器的运作方式将与平台提供的插值器(在上表中列出)完全相同。
- 元素:
- 请注意,在 XML 中定义的每个
Interpolator
实现的名称都以小写字母开头。<accelerateDecelerateInterpolator>
- 变化率在开始和结束时缓慢,但在中间会加快。
没有属性。
<accelerateInterpolator>
- 变化率在开始时较为缓慢,然后会加快。
属性:
android:factor
- 浮点数。加速率(默认为 1)。
<anticipateInterpolator>
- 先反向变化,然后再急速正向变化。
属性:
android:tension
- 浮点数。要应用的张力(默认为 2)。
<anticipateOvershootInterpolator>
- 先反向变化,再急速正向变化并超过目标值,然后以最终值结束。
属性:
android:tension
- 浮点数。要应用的张力(默认为 2)。
android:extraTension
- 浮点数。张力要乘以的倍数(默认值为 1.5)。
<bounceInterpolator>
- 变化会在结束时退回。
没有属性。
<cycleInterpolator>
按指定的循环次数重复动画。变化率符合正弦曲线图。
属性:
android:cycles
- 整数。循环次数(默认值为 1)。
<decelerateInterpolator>
- 变化率开始时很快,然后减慢。
属性:
android:factor
- 浮点数。减速率(默认值为 1)。
<linearInterpolator>
- 变化率恒定不变。
没有属性。
<overshootInterpolator>
- 先急速正向变化,再超过最终值,然后回到最终值。
属性:
android:tension
- 浮点数。要应用的张力(默认为 2)。
示例:
保存在 res/anim/my_overshoot_interpolator.xml
的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
android:tension="7.0"
/>
此动画 XML 将应用插值器:
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@anim/my_overshoot_interpolator"
android:fromXScale="1.0"
android:toXScale="3.0"
android:fromYScale="1.0"
android:toYScale="3.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="700" />
帧动画
在 XML 中定义的按顺序显示一系列图片的动画(如电影)。
- 文件位置:
res/drawable/filename.xml
该文件名将用作资源 ID。- 编译后的资源数据类型:
- 指向
AnimationDrawable
的资源指针。 - 资源引用:
- 在 Java 中:
R.drawable.filename
在 XML 中:@[package:]drawable.filename
- 语法:
-
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot=["true" | "false"] >
<item
android:drawable="@[package:]drawable/drawable_resource_name"
android:duration="integer" />
</animation-list>
- 元素:
-
<animation-list>
- 必需。此元素必须是根元素。包含一个或多个
<item>
元素。属性:
android:oneshot
- 布尔值。如果您想要执行一次动画,则为“true”;如果要循环播放动画,则为“false”。
<item>
- 单帧动画。必须是
<animation-list>
元素的子元素。属性:
android:drawable
- 可绘制资源。要用于此帧的可绘制对象。
android:duration
- 整数。显示此帧的持续时间,以毫秒为单位。
- 示例:
-
- 保存在
res/drawable/rocket.xml
的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>-
- 以下应用代码会将该动画设置为 View 的背景,然后播放动画:
java 代码: ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust); rocketAnimation = rocketImage.getBackground();
if (rocketAnimation instanceof Animatable) {
((Animatable)rocketAnimation).start();
} kotlin 代码: val rocketImage: ImageView = findViewById(R.id.rocket_image)
rocketImage.setBackgroundResource(R.drawable.rocket_thrust) val rocketAnimation = rocketImage.background
if (rocketAnimation is Animatable) {
rocketAnimation.start()
} - 保存在
Android复习(二)应用资源 --> 动画的更多相关文章
- Android 利用二次贝塞尔曲线模仿购物车加入物品抛物线动画
Android 利用二次贝塞尔曲线模仿购物车加入物品抛物线动画 0.首先.先给出一张效果gif图. 1.贝塞尔曲线原理及相关公式參考:http://www.jianshu.com/p/c0d7ad79 ...
- Android应用资源---动画资源(Animation Resources)
有两种类型的动画资源: 属性动画 在设定的时间内,通过修改与Animator类相关的对象的属性值来创建一个动画. 视图动画 有两种类型的视图动画框架 补间动画(Tween animation):通过执 ...
- Android 8.1 关机充电动画(二)Uboot模式
system:Android 8.1 platform:RK3326/PX30 uboot kernel Android 8.1 关机充电动画(一)模式选择 Android 8.1 关机充电动画(二) ...
- 动画_ _ Android应用开发之所有动画使用详解
转载: http://blog.csdn.net/yanbober/article/details/46481171 题外话:有段时间没有更新博客了,这篇文章也是之前写了一半一直放在草稿箱,今天抽空把 ...
- Android(java)学习笔记198:Android下的逐帧动画(Drawable Animation)
1.帧动画: 帧动画顾名思义,一帧一帧播放的动画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在相同区域快速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,其实不过是N张图片在一帧一帧 ...
- Android 5.0 全新的动画
触摸反馈 ripple 触摸反馈是指用户在触摸控件时的一种可视化交互,在Android L之前,通常是通过press色变来凸显,但是因为是瞬间变化的效果,不如动画生动. 在Android L 中定义了 ...
- Android中TweenAnimation四种动画切换效果
点击每个按钮都会有对应的动画显示 activity代码: package com.tmacsky; import android.app.Activity; import android.os.Bun ...
- Android进阶(二十)AndroidAPP开发问题汇总(四)
· Android进阶(二十)AndroidAPP开发问题汇总(四) android:layout_width和android:width的区别 基中的android:layout_width和and ...
- Android生成二维码--保存和分享二维码图片
之前写过生成自定义二维码的两篇文章:<Android生成自定义二维码><Android生成二维码–拍照或从相册选取图片>,下面就介绍一下Android应用内如何保存以及分享二维 ...
- Android开发---如何操作资源目录中的资源文件4 ---访问xml的配置资源文件的内容
Android开发---如何操作资源目录中的资源文件4 XML,位于res/xml/,这些静态的XML文件用于保存程序的数据和结构. XmlPullParser可以用于解释xml文件 效果图: 描述: ...
随机推荐
- 【Java】File 文件类
File 文件类 File类的一个对象,代表了一个文件和一个文件目录/文件夹 File类所属在java.io 的包下 构造器部分 - 以parent为父文件,child为子路径创建File对象,可以理 ...
- bazel编译报错:absl/base/policy_checks.h:79:2: error: #error "C++ versions less than C++14 are not supported."
使用bazel编译一个软件时报错,报错的信息为: absl/base/policy_checks.h:79:2: error: #error "C++ versions less than ...
- Python 潮流周刊#64:Python 的函数调用还很慢么?(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- CSV文件导出详细讲解
一.准备jar 如下所以放入maven配置文件中 二.controller层 三.SERVICE层 四.CsvUtil文件 /** * csv文件导入导出 */public class CsvUti ...
- Exgcd 模板
Exgcd 模板 pair<int, int> exgcd(int a, int b) { if (b == 0)return make_pair(1, 0); auto [x, y] = ...
- 微服务架构springcloud
码云地址:https://gitee.com/lpxs/lp-springcloud.git 有问题可以多沟通:136358344@qq.com. 微服务架构 一.服务化简介 服务化的核心就是将传统的 ...
- Cookie,Session Filter,Listener详解
HTTP请求的无状态性 HTTP的无状态性是其一个重要的特征,指的是HTTP协议本身并不保留客户端与服务器交互的历史信息,换而言之,即每次的HTTP请求都是独立的,服务器在处理每一个请求时都不会记住前 ...
- 廉价平替esphome水浸 雨水传感器diy
2024年7月27日 改进了手头的所有8266 都加了红外和dht11 干了一件非常抽象的事情 调试的时候给dht11 插到5v了 单薄的它好像要融化了 binary_sensor: # 水浸 雨水 ...
- Daph:新一代流批一体数据集成与数据处理工具
Daph源码位于gitee,地址是https://gitee.com/dasea96/daph 概述 Daph的中文名称是大副,大副是职位仅低于船长的船舶驾驶员,甲板部(驾驶部)负责人,船长的主要助手 ...
- C 语言编译过程
编译过程 编译过程是将高级编程语言(如 C 语言)写成的源代码转换成机器可以执行的低级机器语言(通常是二进制代码)的过程.这个过程一般可以分为几个阶段: 预处理(Preprocessing): 预处理 ...