@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ivRocket = (ImageView) findViewById(R.id.iv_rocket);
ivBottom = (ImageView) findViewById(R.id.iv_bottom);
ivTop = findViewById(R.id.iv_top);
rocketAnim();
}
private void smokeAnim() {
ivBottom.setVisibility(View.VISIBLE);
ivTop.setVisibility(View.VISIBLE);
AlphaAnimation aa = new AlphaAnimation(0, 1.0f);
aa.setDuration(300);
aa.setRepeatCount(1);
aa.setRepeatMode(AlphaAnimation.REVERSE);
// 结束时,停留在结束的状态
aa.setFillAfter(true);
// 开启
ivBottom.startAnimation(aa);
ivTop.startAnimation(aa);
}
private void sendRocket(final int l, final int t, final int r, final int b) {
hc = 0;
new Thread() {
public void run() {
SystemClock.sleep(300);
for (int i = 0; i < 30; i++) {
hc = hc + 20;
runOnUiThread(new Runnable() {
public void run() {
ivRocket.layout(l, t - hc, r, b - hc);
}
});
}
};
}.start();
}
@SuppressWarnings("deprecation")
private void rocketAnim() {
// 得到屏幕的宽和高
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
windoewHeight = display.getHeight();
windowWidth = display.getWidth();
ivRocket = (ImageView) findViewById(R.id.iv_rocket);
// 将背景设置成动画***
ivRocket.setBackgroundResource(R.drawable.rocket);
an = (AnimationDrawable) ivRocket.getBackground();
// 开启动画***
an.start();
// 设置点击事件
ivRocket.setOnTouchListener(new OnTouchListener() {
private int startX;
private int startY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 鼠标移动前的坐标
startX = (int) event.getRawX();
startY = (int) event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
// 鼠标移动后的坐标
int stopX = (int) event.getRawX();
int stopY = (int) event.getRawY();
// 偏移量
int dx = stopX - startX;
int dy = stopY - startY;
// 得到小火箭移动前的坐标点 距离屏幕边框的距离
int left = ivRocket.getLeft();
int top = ivRocket.getTop();
int right = ivRocket.getRight();
int bottom = ivRocket.getBottom();
int l = left + dx;
int t = top + dy;
int r = right + dx;
int b = bottom + dy;
// 不能超出框 判断
if (b > windoewHeight) {
b = windoewHeight;
t = windoewHeight - ivRocket.getHeight();
}
if (r > windowWidth) {
r = windowWidth;
l = windowWidth - ivRocket.getWidth();
}
// 把控件显示在指定的位置
ivRocket.layout(l, t, r, b);
// 6,把移动后的坐标点作为下次坐标的开始点
startX = stopX;
startY = stopY;
break;
case MotionEvent.ACTION_UP:
// 手抬起时的坐标
int lastX = (int) event.getRawX();
int lastY = (int) event.getRawY();
// 判断火箭是否落在可发射区域
if (lastX > 100 && lastX < 450 && lastY > 350) {
// 手抬起时,距离四个边框的距离
int upLeft = ivRocket.getLeft();
int upTop = ivRocket.getTop();
int upRight = ivRocket.getRight();
int upBottom = ivRocket.getBottom();
sendRocket(upLeft, upTop, upRight, upBottom);
smokeAnim();
}
break;
}
return true;
}
});
}
}