您的位置:首页 > 其它

ImageView增加动画效果

2016-06-05 21:23 253 查看

给ImageView增加动画背景+随意拖动

步骤:

1.创建animation-list的动画xml文件

2.将上一步的xml设置为ImageView对象的背景资源

3.start动画

代码:

(代码中顺便为ImageView对象加上了随意拖动效果)

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.AlphaAnimation;
import android.view.WindowManager;
import android.widget.ImageView;

public class MainActivity extends Activity {

private ImageView rocketImage;
private Display display;

private Handler handler = new Handler(){
public void handleMessage(Message msg) {
int y = (Integer) msg.obj;
rocketImage.layout(rocketImage.getLeft(), y, rocketImage.getRight(), y +rocketImage.getHeight());
};
};
private AlphaAnimation aa;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
aa = new AlphaAnimation(0.0f,1.0f);
aa.setDuration(500);
aa.setRepeatCount(1);
aa.setRepeatMode(AlphaAnimation.REVERSE);
aa.setFillAfter(true);

// 得到默认的分辨率对象
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
display = wm.getDefaultDisplay();

rocketImage = (ImageView) findViewById(R.id.iv_rocket);
// 加载动画资源文件
rocketImage.setBackgroundResource(R.drawable.rocket);
// 得到空间上的动画对象
AnimationDrawable rocketAnimation = (AnimationDrawable) rocketImage
.getBackground();
rocketAnimation.start();

rocketImage.setOnTouchListener(new OnTouchListener() {

private int startX;
private int startY;

@Override
public boolean onTouch(View v, MotionEvent event) {
// 得到触摸事件的类型
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:// 按下的事件
startX = (int) event.getRawX();
startY = (int) event.getRawY();

break;
case MotionEvent.ACTION_MOVE:// 移动的事件
// 2、在移动的过程中得到结束坐标点
int endX = (int) event.getRawX();
int endY = (int) event.getRawY();

// 3、计算移动的偏移量
int dX = endX - startX;
int dY = endY - startY;
// 4、更新图标的位置
int l = rocketImage.getLeft() + dX;
int t = rocketImage.getTop() + dY;
int r = rocketImage.getRight() + dX;
int b = rocketImage.getBottom() + dY;
if (l < 0 || t < 0 || r > display.getWidth()
|| (b + 40) > display.getHeight()) {
break;
}
rocketImage.layout(l, t, r, b);

// 5、得到新的开始坐标点
startX = (int) event.getRawX();
startY = (int) event.getRawY();
break;
case MotionEvent.ACTION_UP:// 抬起的事件
int ll = rocketImage.getLeft();
int lr = rocketImage.getRight();

int lb = rocketImage.getBottom();
if(ll > 100 && lr < 300 && lb > 350){
sendRocket();
iv_bottom.startAnimation(aa);
iv_top.startAnimation(aa);
}
break;
}
return true;
}

});
}

private void sendRocket() {
new Thread(){
public void run() {
for(int i= 0; i< 12;i++){
SystemClock.sleep(10);
int y = 480-i*48;

Message msg = Message.obtain();
msg.obj = y;
handler.sendMessage(msg);
// rocketImage.layout(rocketImage.getLeft(), y, rocketImage.getRight(), y +rocketImage.getHeight());
}
};
}.start();

}

}
rocket.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/desktop_rocket_launch_1" android:duration="200" />
<item android:drawable="@drawable/desktop_rocket_launch_2" android:duration="200" />
</animation-list>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ImageView动画