初识安卓中的动画
2018-08-11 本文已影响0人
dev晴天
1 帧动画 (加载一系列图片资源)
创建: 在drawable下创建 xml文件 节点改为animatiom-list
内部的item节点属性drawable 设置图片 duraing 时间
这是个drawable 一定是使用ImageView进行显示的。
显示:
首先主activity中找id 获得ImageView对象
在进行设置背景资源 ImageView对象的setBackGroundResource(定 义的drawable xml)
通过ImageView的getBackground()强转获得AnimtionDrawable对象
通过对象的start();开启动画
2 View动画 (补间动画)
3 属性动画
安卓中的逐帧动画:
drawerAnim xml中定义 ImageView中显示
安卓中的补间动画: view动画 安卓里的view控件都可以播放
1 透明AlphaAnim
2 旋转 rotateAnim
3 缩放 ScaleAnim
4 位移 translateAnim
还有个动画集合 可以吧这些动画一起执行
一般补间动画是通过变换图片达到动画的效果
demo:::::
public class MainActivity extends AppCompatActivity {
private ImageView ivImg;
private AlphaAnimation aa;
private RotateAnimation ra;
private ScaleAnimation sa;
private TranslateAnimation ta;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ivImg = (ImageView) findViewById(R.id.iv_img);
}
public void doalpha(View view){
/*渐变动画 参数 开始时的颜色 结束时的颜色 0.0 完全透明 1.0 完全不透明*/
aa = new AlphaAnimation(0.0f,1.0f);
aa.setDuration(5000);//动画执行时间
//aa.setRepeatCount(1);//动画重复的次数
// aa.setRepeatMode(Animation.REVERSE);//重复模式
aa.setFillAfter(true);//保持执行后状态
ivImg.startAnimation(aa);//开启动画
}
public void dorotate(View view){
//旋转动画 参数 起始旋转的角度 结束时选装的角度 xy相对自身旋转 0.5 代表图片
宽高都是一半 正好相对自身中心旋转
ra = new RotateAnimation(0,360,
Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
ra.setDuration(5000);
ra.setFillAfter(true);
ivImg.startAnimation(ra);
}
public void doscale(View view){
// 缩放动画 参数x轴开始 结束的缩放比例 参数y轴开始 结束的缩放比例 相对自身中
心点
sa = new ScaleAnimation(1.0f,0.5f,1.0f,0.5f,
Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
sa.setDuration(5000);
sa.setFillAfter(true);
ivImg.startAnimation(sa);
}
public void dotranslate(View view){
// 位移动画 参数 相对父控件 起始x 参数 相对父控件 结束x
//相对父控件 起始y参数 相对父控件 结束y(0.2f代表父控件高度0.2倍)
ta = new TranslateAnimation
(Animation.RELATIVE_TO_PARENT,0,Animation.RELATIVE_TO_PARENT,0,Animation.RELATIVE_TO_PARE
NT,0,Animation.RELATIVE_TO_PARENT,0.2f);
ta.setDuration(5000);
ta.setFillAfter(true);
ivImg.startAnimation(ta);
}
public void doset(View view){
AnimationSet as= new AnimationSet(false);
aa = new AlphaAnimation(0.0f,1.0f);
aa.setDuration(5000);
aa.setFillAfter(true);
ra = new RotateAnimation(0,360,
Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
ra.setDuration(5000);
ra.setFillAfter(true);
sa = new ScaleAnimation(1.0f,0.5f,1.0f,0.5f,
Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
sa.setDuration(5000);
sa.setFillAfter(true);
ta = new TranslateAnimation
(Animation.RELATIVE_TO_PARENT,0,Animation.RELATIVE_TO_PARENT,0,Animation.RELATIVE_TO_PARE
NT,0,Animation.RELATIVE_TO_PARENT,0.2f);
ta.setDuration(5000);
ta.setFillAfter(true);
// 添加到集合
as.addAnimation(aa);
as.addAnimation(ta);
as.addAnimation(sa);
as.addAnimation(ra);
//开启动画
ivImg.startAnimation(as);
}
//注 这些动画(补间动画)的效果不会改变控件的真实坐标
// 属性动画可以
}
xml 方式定义补间动画
res 下 建立anmi 根元素为 各种动画
java中 findViewbyid 可找到
属性动画
类 ObjectAnimator(不是 new出来的) 会改变真是坐标