【1】什么是补间动画:
补间动画也叫 view动画,就是对你一个imageView控件中的类容进行操作,让它旋转,平移,缩放,透明等等。
注意1:它不同于前面多媒体中的图片操作,多媒体中对图片的修改 目的是 修改的结果,你只需要ps之后的图片,而补间动画 目的是 图片改变的过程,例如变透明的过程(图片渐渐变得不可见)等等。
注意2:补间动画对图片的操作 其实并没有改变图片本身的属性 (和属性动画正好相反),例如
TranslateAnimation
平移动画,你看见的是图片平移了,其实imageView本身还在原地,如果imageView有clickListener的话,该监听的触发事件 不一定是当前图片的位置,但一定是布局中对imageView定义的位置。如果你想设置当前图片位置的监听,可参考方法
image.offsetLeftAndRight(-1).
http://bbs.csdn.net/topics/390161612
【2】实现原理:通过AlphaAnimation RotateAnimation TranslateAnimation ScaleAnimation这4个类(对应 透明 旋转 平移 缩放)实现
【3】实现步骤:
第一种方法(不常用):
3.1 布局添加对应变换的按钮 和 imageview控件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click1"
android:text="透明" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click2"
android:text="旋转" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click3"
android:text="平移" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click4"
android:text="缩放" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click5"
android:text="all" />
</LinearLayout>
<ImageView
android:id="@+id/iv"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
</RelativeLayout>
3.2 mainactivity中找到 imageview控件 和 实现3.1中的按钮 的点击事件
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
}
public void click1(View v) {
AlphaAnimation aanimation=new AlphaAnimation(0.0f, 1.0f);
aanimation.setRepeatMode(Animation.REVERSE);
aanimation.setRepeatCount(1);
aanimation.setDuration(1000);
iv.startAnimation(aanimation);
}
public void click2(View v) {
RotateAnimation ranimation=new RotateAnimation(0, 360,Animation.RELATIVE_TO_SELF ,0.5f, Animation.RELATIVE_TO_SELF,0.5f);
ranimation.setRepeatMode(Animation.REVERSE);
ranimation.setRepeatCount(1);
ranimation.setDuration(1000);
iv.startAnimation(ranimation);
}
public void click3(View v) {
TranslateAnimation tanimation=new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT,0, Animation.RELATIVE_TO_PARENT, 0,Animation.RELATIVE_TO_PARENT, 0.5f);
tanimation.setDuration(4000);
tanimation.setFillAfter(false);
iv.startAnimation(tanimation);
}
public void click4(View v) {
ScaleAnimation sanimation=new ScaleAnimation(1, 2f, 1, 2f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
sanimation.setRepeatMode(Animation.REVERSE);
sanimation.setRepeatCount(1);
sanimation.setDuration(1000);
sanimation.setFillAfter(true);
iv.startAnimation(sanimation);
}
}
3.3 你可以让多个操作组合使用(图片同时旋转 平移 缩放 透明)
public void click5(View v) {
AnimationSet set=new AnimationSet(true);
AlphaAnimation aanimation=new AlphaAnimation(0.0f, 1.0f);
aanimation.setRepeatMode(Animation.REVERSE);
aanimation.setRepeatCount(1);
aanimation.setDuration(1000);
RotateAnimation ranimation=new RotateAnimation(0, 360,Animation.RELATIVE_TO_SELF ,0.5f, Animation.RELATIVE_TO_SELF,0.5f);
ranimation.setRepeatMode(Animation.REVERSE);
ranimation.setRepeatCount(1);
ranimation.setDuration(1000);
TranslateAnimation tanimation=new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT,0, Animation.RELATIVE_TO_PARENT, 0,Animation.RELATIVE_TO_PARENT, 0.5f);
tanimation.setRepeatMode(Animation.REVERSE);
tanimation.setRepeatCount(1);
tanimation.setDuration(1000);
tanimation.setFillAfter(true);
ScaleAnimation sanimation=new ScaleAnimation(1, 2f, 1, 2f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
sanimation.setRepeatMode(Animation.REVERSE);
sanimation.setRepeatCount(1);
sanimation.setDuration(1000);
sanimation.setFillAfter(true);
set.addAnimation(aanimation);
set.addAnimation(sanimation);
set.addAnimation(ranimation);
set.addAnimation(tanimation);
iv.setAnimation(set);
}