小火箭


@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;
}


});


}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值