帧动画
animationDrawable = (AnimationDrawable) imageView.getBackground();创建animationDrawable对象
animationDrawable.start():开启动画
animationDrawable.stop():停止动画
xml实现
图片
// An highlighted block
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/p1" android:duration="50"/>
<item android:drawable="@drawable/p2" android:duration="50"/>
<item android:drawable="@drawable/p3" android:duration="50"/>
<item android:drawable="@drawable/p4" android:duration="50"/>
<item android:drawable="@drawable/p5" android:duration="50"/>
<item android:drawable="@drawable/p6" android:duration="50"/>
<item android:drawable="@drawable/p7" android:duration="50"/>
<item android:drawable="@drawable/p8" android:duration="50"/>
</animation-list>
// An highlighted block
@ContentView(R.layout.activity_xml)
public class XmlActivity extends AppCompatActivity {
@ViewInject(R.id.xml_start)
private Button start;
@ViewInject(R.id.xml_stop)
private Button stop;
@ViewInject(R.id.xml_img)
private ImageView imageView;
private AnimationDrawable animationDrawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
x.view().inject(XmlActivity.this);
animationDrawable = (AnimationDrawable) imageView.getBackground();
}
@Event(value = {R.id.xml_start,R.id.xml_stop},type = View.OnClickListener.class)
private void click(View view){
switch (view.getId()){
case R.id.xml_start:
startAnimatiomn();
break;
case R.id.xml_stop:
stopAnimation();
break;
}
}
private void stopAnimation() {
animationDrawable.stop();
}
private void startAnimatiomn() {
animationDrawable.start();
}
}
代码实现
添加要设置动画的图片
// An highlighted block
animationDrawable = new AnimationDrawable();
animationDrawable.addFrame(getResources().getDrawable(R.drawable.p1),50);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.p2),50);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.p3),50);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.p4),50);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.p5),50);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.p6),50);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.p7),50);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.p8),50);
imageView.setImageDrawable(animationDrawable);
// An highlighted block
@ContentView(R.layout.activity_java)
public class JavaActivity extends AppCompatActivity {
@ViewInject(R.id.java_start)
private Button start;
@ViewInject(R.id.java_stop)
private Button stop;
@ViewInject(R.id.java_img)
private ImageView imageView;
private AnimationDrawable animationDrawable;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
x.view().inject(JavaActivity.this);
initAnimation();
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void initAnimation() {
animationDrawable = new AnimationDrawable();
animationDrawable.addFrame(getResources().getDrawable(R.drawable.p1),50);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.p2),50);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.p3),50);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.p4),50);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.p5),50);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.p6),50);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.p7),50);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.p8),50);
imageView.setImageDrawable(animationDrawable);
}
@Event(value = {R.id.java_start,R.id.java_stop},type = View.OnClickListener.class)
private void click(View view){
switch (view.getId()){
case R.id.java_start:
startAnimation();
break;
case R.id.java_stop:
stopAnimation();
break;
}
}
private void stopAnimation() {
if(animationDrawable.isRunning()){
animationDrawable.stop();
}
}
private void startAnimation() {
if(!animationDrawable.isRunning()){
animationDrawable.start();
}
}
}
补间动画
setFillBefore(true):设置动画演示完是否返回动画最初效果
setRepeatCount(5):设置动画效果执行次数
setDuration(5000):设置动画效果每次执行时间
setRepeatMode():设置动画模式
setInterpolator():设置动画的插值器
startAnimation():开启动画
透明动画
// An highlighted block
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:fillBefore="true"
android:duration="5000"
>
</alpha>
旋转动画
// An highlighted block
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="720"
android:pivotX="100"
android:pivotY="100"
android:duration="5000"
android:fillBefore="true"
>
</rotate>
缩放动画
// An highlighted block
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXScale="1.0"
android:toXScale="3.0"
android:fromYScale="1.0"
android:toYScale="4.0"
android:pivotY="100"
android:pivotX="200"
android:duration="5000"
android:fillBefore="true"
>
</scale>
平移动画
// An highlighted block
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:toXDelta="300"
android:duration="500"
android:fillBefore="true"
>
</translate>
动画集合
// An highlighted block
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:fillBefore="true"
android:duration="5000"
></alpha>
<rotate
android:fromDegrees="0"
android:toDegrees="720"
android:pivotX="100"
android:pivotY="100"
android:duration="5000"
android:fillBefore="true"
></rotate>
<scale
android:fromXScale="1.0"
android:toXScale="3.0"
android:fromYScale="1.0"
android:toYScale="4.0"
android:pivotY="100"
android:pivotX="200"
android:duration="5000"
android:fillBefore="true"
></scale>
<translate
android:fromXDelta="0"
android:toXDelta="300"
android:duration="500"
android:fillBefore="true"
>
</translate>
</set>
// An highlighted block
@ContentView(R.layout.activity_tween)
public class TweenActivity extends AppCompatActivity {
@ViewInject(R.id.tween_alpha)
private Button alpha;
@ViewInject(R.id.tween_scale)
private Button scale;
@ViewInject(R.id.tween_rotate)
private Button rotate;
@ViewInject(R.id.tween_translate)
private Button teanslate;
@ViewInject(R.id.tween_set)
private Button set;
@ViewInject(R.id.tween_img)
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
x.view().inject(TweenActivity.this);
}
@Event(value = {R.id.tween_alpha,R.id.tween_scale,R.id.tween_rotate,R.id.tween_translate,R.id.tween_set},type = View.OnClickListener.class)
private void click(View view){
switch (view.getId()){
case R.id.tween_alpha:
setalpha();
break;
case R.id.tween_rotate:
setrotate();
break;
case R.id.tween_scale:
setscale();
break;
case R.id.tween_translate:
settranslate();
break;
case R.id.tween_set:
set();
break;
}
}
private void set() {
Animation animation = AnimationUtils.loadAnimation(TweenActivity.this, R.anim.set);
imageView.startAnimation(animation);
}
private void settranslate() {
Animation animation = AnimationUtils.loadAnimation(TweenActivity.this, R.anim.translate);
imageView.startAnimation(animation);
}
private void setscale() {
// Animation animation = AnimationUtils.loadAnimation(TweenActivity.this, R.anim.scale);
// imageView.startAnimation(animation);
ScaleAnimation scaleAnimation = new ScaleAnimation(1,3,1,4,ScaleAnimation.ABSOLUTE, 200,ScaleAnimation.ABSOLUTE,100);
scaleAnimation.setFillBefore(true);
scaleAnimation.setRepeatCount(5);
scaleAnimation.setDuration(5000);
scaleAnimation.setRepeatMode(ScaleAnimation.REVERSE);
scaleAnimation.setInterpolator(new BounceInterpolator());
imageView.startAnimation(scaleAnimation);
}
private void setrotate() {
Animation animation = AnimationUtils.loadAnimation(TweenActivity.this, R.anim.rotate);
imageView.startAnimation(animation);
}
private void setalpha() {
Animation animation = AnimationUtils.loadAnimation(TweenActivity.this, R.anim.alpha);
imageView.startAnimation(animation);
}
}