Android开发之图形图像与动画(三)Animation效果的XML实现
2023-06-13 09:14:44 时间
使用XML来定义TweenAnimation
动画的XML文件在工程中res/anim目录,这个文件必须包含一个根元素,可以使<alpha><scale><translate><rotate>插值元素或者是把上面的元素都放入<set>元素组中,默认情况下,所以的动画指令都是同时发生的,为了让他们按序列发生,需要设置一个特殊的属性startOffset。动画的指令定义了你想要发生什么样的转换,当他们发生了,应该执行多长时间,转换可以是连续的也可以使同时的。例如,你让文本内容从左边移动到右边,然后旋转180度,或者在移动的过程中同时旋转,没个转换需要设置一些特殊的参数(开始和结束的大小尺寸的大小变化,开始和结束的旋转角度等等,也可以设置些基本的参数(例如,开始时间与周期),如果让几个转换同时发生,可以给它们设置相同的开始时间,如果按序列的话,计算开始时间加上其周期。
TweenAnimation共同的节点属性
属性[类型]
功能
备注
Duration[long]
属性为动画持续时间
时间以毫秒为单位
fillAfter[boolean]
当设置为true,该动画转化在动画结束后被应用
fillBefore[boolean]
当设置为true,该动画转化在动画开始前被应用
指定一个动画的插入器
有一些常见的插入器
accelerate_decelerate_interpolator
加速-减速动画插入器
accelerate_interpolator
加速-动画插入器
decelerate_interpolator
减速-动画插入器
其他的属于特定的动画效果
repeatCount[int]
动画的重复次数
RepeatMode[int]
定义重复的行为
1:重新开始 2:playsbackward
startOffset[long]
动画之间的时间间隔,从上次动画停多少时间开始执行下个动画
zAdjustment[int]
定义动画的ZOrder的改变
0:保持ZOrder不变
1:保持在最上层
-1:保持在最下层
XML节点
功能说明
alpha
渐变透明度动画效果
<alpha
android:fromAlpha=”0.1″
android:toAlpha=”1.0″
android:duration=”3000″/>
fromAlpha
scale
渐变尺寸伸缩动画效果
<scale
android:interpolator=“@android:anim/accelerate_decelerate_interpolator”
android:fromXScale=”0.0″
android:toXScale=”1.4″
android:fromYScale=”0.0″
android:toYScale=”1.4″
android:pivotX=”50%”
android:pivotY=”50%”
android:fillAfter=”false”
android:startOffset=“700”
android:duration=”700″
android:repeatCount=”10″/>
fromXScale[float]fromYScale[float]
为动画起始时,X、Y坐标上的伸缩尺寸
0.0表示收缩到没有
1.0表示正常无伸缩
值小于1.0表示收缩
值大于1.0表示放大
toXScale[float]
toYScale[float]
为动画结束时,X、Y坐标上的伸缩尺寸
pivotX[float]
pivotY[float]
为动画相对于物件的X、Y坐标的开始位置
属性值说明:从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置
表四
translate
画面转换位置移动动画效果
<translate
android:fromXDelta=”30″
android:toXDelta=”-80″
android:fromYDelta=”30″
android:toYDelta=”300″
android:duration=”2000″/>
fromXDelta
toXDelta
为动画、结束起始时X坐标上的位置
fromYDelta
toYDelta
为动画、结束起始时Y坐标上的位置
表五
rotate
画面转移旋转动画效果
<rotate
android:interpolator=”@android:anim/accelerate_decelerate_interpolator”
android:fromDegrees=”0″
android:toDegrees=”+350″
android:pivotX=”50%”
android:pivotY=”50%”
android:duration=”3000″/>
fromDegrees
为动画起始时物件的角度
说明
当角度为负数——表示逆时针旋转
当角度为正数——表示顺时针旋转
(负数from——to正数:顺时针旋转)
(负数from——to负数:逆时针旋转)
(正数from——to正数:顺时针旋转)
(正数from——to负数:逆时针旋转)
toDegrees
属性为动画结束时物件旋转的角度可以大于360度
pivotX
pivotY
为动画相对于物件的X、Y坐标的开始位
说明:以上两个属性值从0%-100%中取值
50%为物件的X或Y方向坐标上的中点位置
下面给出一个完整的XML定义(SDK提供)
复制代码代码如下:
动画的XML文件在工程中res/anim目录,这个文件必须包含一个根元素,可以使<alpha><scale><translate><rotate>插值元素或者是把上面的元素都放入<set>元素组中,默认情况下,所以的动画指令都是同时发生的,为了让他们按序列发生,需要设置一个特殊的属性startOffset。动画的指令定义了你想要发生什么样的转换,当他们发生了,应该执行多长时间,转换可以是连续的也可以使同时的。例如,你让文本内容从左边移动到右边,然后旋转180度,或者在移动的过程中同时旋转,没个转换需要设置一些特殊的参数(开始和结束的大小尺寸的大小变化,开始和结束的旋转角度等等,也可以设置些基本的参数(例如,开始时间与周期),如果让几个转换同时发生,可以给它们设置相同的开始时间,如果按序列的话,计算开始时间加上其周期。
TweenAnimation共同的节点属性
interpolator
accelerate_decelerate_interpolator
加速-减速动画插入器
accelerate_interpolator
加速-动画插入器
decelerate_interpolator
减速-动画插入器
其他的属于特定的动画效果
1:保持在最上层
-1:保持在最下层
表二
android:fromAlpha=”0.1″
android:toAlpha=”1.0″
android:duration=”3000″/>
属性为动画起始时透明度
0.0表示完全透明
1.0表示完全不透明
以上值取0.0-1.0之间的float数据类型的数字
duration为动画持续时间,ms单位
toAlpha
属性为动画结束时透明度
表三
android:interpolator=“@android:anim/accelerate_decelerate_interpolator”
android:fromXScale=”0.0″
android:toXScale=”1.4″
android:fromYScale=”0.0″
android:toYScale=”1.4″
android:pivotX=”50%”
android:pivotY=”50%”
android:fillAfter=”false”
android:startOffset=“700”
android:duration=”700″
android:repeatCount=”10″/>
1.0表示正常无伸缩
值小于1.0表示收缩
值大于1.0表示放大
toYScale[float]
pivotY[float]
android:fromXDelta=”30″
android:toXDelta=”-80″
android:fromYDelta=”30″
android:toYDelta=”300″
android:duration=”2000″/>
toXDelta
toYDelta
android:interpolator=”@android:anim/accelerate_decelerate_interpolator”
android:fromDegrees=”0″
android:toDegrees=”+350″
android:pivotX=”50%”
android:pivotY=”50%”
android:duration=”3000″/>
当角度为负数——表示逆时针旋转
当角度为正数——表示顺时针旋转
(负数from——to正数:顺时针旋转)
(负数from——to负数:逆时针旋转)
(正数from——to正数:顺时针旋转)
(正数from——to负数:逆时针旋转)
pivotY
50%为物件的X或Y方向坐标上的中点位置
下面给出一个完整的XML定义(SDK提供)
<SPANstyle="FONT-SIZE:18px"><setandroid:shareInterpolator="false"xmlns:android="http://schemas.android.com/apk/res/android">
<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"/>
<setandroid:interpolator="@android:anim/decelerate_interpolator">
<scale
android:fromXScale="1.4"
android:toXScale="0.0"
android:fromYScale="0.6"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="700"
android:duration="400"
android:fillBefore="false"/>
<rotate
android:fromDegrees="0"
android:toDegrees="-45"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="700"
android:duration="400"/>
</set>
</set></SPAN>
一下是实现的一个实例的截图:
pic
所用到的xml文件如下:
1.alpha
<setxmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:startOffset="500"
android:duration="2000"
/>
</set>
2.rotate
<setxmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000"
/>
</set>
3.scale
<setxmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="0.0"
android:toXScale="1.0"
android:fromYScale="0.0"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:duration="2000"
/>
</set>
4.translate
<setxmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="10"
android:toXDelta="100"
android:fromYDelta="10"
android:toYDelta="100"
android:duration="2000"
/>
</set>
具体的实现源代码如下:
publicclassAnimation_XML_ActivityextendsActivity{
privateButtonbutton1;
privateButtonbutton2;
privateButtonbutton3;
privateButtonbutton4;
privateImageViewimageView;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_animation__xml_);
button1=(Button)findViewById(R.id.button_alpha);
button2=(Button)findViewById(R.id.button_rotate);
button3=(Button)findViewById(R.id.button_scale);
button4=(Button)findViewById(R.id.button_translate);
imageView=(ImageView)findViewById(R.id.imageview);
button1.setOnClickListener(newMyButton());
button2.setOnClickListener(newMyButton());
button3.setOnClickListener(newMyButton());
button4.setOnClickListener(newMyButton());
}
classMyButtonimplementsOnClickListener{
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
switch(v.getId()){
caseR.id.button_alpha:
Alpha();
break;
caseR.id.button_rotate:
Rotate();
break;
caseR.id.button_scale:
Scale();
break;
caseR.id.button_translate:
Translate();
break;
default:
break;
}
}
}
publicvoidAlpha(){
Animationanimation=AnimationUtils.loadAnimation(Animation_XML_Activity.this,R.anim.alpha);
imageView.startAnimation(animation);
}
publicvoidRotate(){
Animationanimation=AnimationUtils.loadAnimation(Animation_XML_Activity.this,R.anim.rotate);
imageView.startAnimation(animation);
}
publicvoidScale(){
Animationanimation=AnimationUtils.loadAnimation(Animation_XML_Activity.this,R.anim.scale);
imageView.startAnimation(animation);
}
publicvoidTranslate(){
Animationanimation=AnimationUtils.loadAnimation(Animation_XML_Activity.this,R.anim.translate);
imageView.startAnimation(animation);
}
@Override
publicbooleanonCreateOptionsMenu(Menumenu){
//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
getMenuInflater().inflate(R.menu.activity_animation__xml_,menu);
returntrue;
}
}
相关文章
- android scaleanimation动画,【Android动画九章】-RotateAnimation(旋转动画)和ScaleAnimation(尺寸动画)…[通俗易懂]
- android+制作开机动画,Android 开机动画制作详解
- 74款android开机动画,修改Android系统开机动画
- android 常用加密,分享一下Android各种类型的加密
- android activity自动跳转,Android activity跳转之finish()方法的作用
- android面试题2022
- strictmode android,Android中的StrictMode
- android 模拟器 haxm,Android模拟器不使用HAXM
- Android中mesure过程详解 –[通俗易懂]
- Android保存图片到相册(适配android 10以下及以上)
- Mac版安卓文件传输:Android File Transfer
- 【Android 高性能音频】Oboe 开发流程 ( Oboe 音频帧简介 | AudioStreamCallback 中的数据帧说明 )
- 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 测试 lib7zr.so 动态库调用 )
- Android SmartTabLayout worm蠕虫蠕动/普通平整动画切换动画属性详解手机开发
- [android] 界面切换的简单动画详解手机开发
- [android] 数据的异步加载和图片保存详解手机开发
- Android开发之50个常见实用技巧——添加悦目的动画效果详解手机开发
- Android SD卡内的文件读写操作详解编程语言
- 安卓编年史(7):Android 1.1——第一个真正的增量更新
- Android开发之图形图像与动画(一)Paint和Canvas类学习
- Android实现授权访问网页的方法