80,471
社区成员




package com.movebutton;
import android.app.Activity;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.animation.Animation;
import android.view.animation.ScaleAnimation;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.TextView;
public class MainActivity extends Activity implements OnTouchListener,
OnClickListener {
private ImageButton moveButton;
private int screenW, screenH;
private int downX, downY;
private TextView tv;
ScaleAnimation animation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DisplayMetrics dm = getResources().getDisplayMetrics();
screenW = dm.widthPixels;
screenH = dm.heightPixels;
moveButton = (ImageButton) this.findViewById(R.id.moveButton);
tv = (TextView) this.findViewById(R.id.textView1);
moveButton.setOnTouchListener(this);
animation = new ScaleAnimation(1.0f, 1.5f, 1.0f, 1.5f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
animation.setDuration(1000);// 设置动画持续时间
// animation.setRepeatCount(int repeatCount);//设置重复次数
animation.setFillAfter(true);// 动画执行完后是否停留在执行完的状态
// animation.setStartOffset(long startOffset);//执行前的等待时间
}
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// 点击时按钮所在位置
downX = (int) event.getRawX();
downY = (int) event.getRawY();
v.startAnimation(animation);
break;
case MotionEvent.ACTION_MOVE:
int dx = (int) event.getRawX() - downX;
int dy = (int) event.getRawY() - downY;
int left = v.getLeft() + dx;
int top = v.getTop() + dy;
int right = v.getRight() + dx;
int bottom = v.getBottom() + dy;
// 判断移动是否超出屏幕
if (left < 0) {
left = 0;
right = left + v.getWidth();
}
if (top < 0) {
top = 0;
bottom = top + v.getHeight();
}
if (right > screenW) {
right = screenW;
left = right - v.getWidth();
}
if (bottom > screenH) {
bottom = v.getHeight();
top = screenH - v.getHeight() + v.getHeight();
}
downX = (int) event.getRawX();
downY = (int) event.getRawY();
v.layout(left, top, right, bottom);
v.postInvalidate();
// tv.setText("左:"+left+"上:"+top+"右:"+right+"下:"+bottom);
Log.e("", "左:" + left + "上:" + top + "右:" + right + "下:" + bottom
+ "高:" + screenH);
break;
case MotionEvent.ACTION_UP:
// animation.cancel();
break;
}
return false;
}
@Override
public void onClick(View v) {
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
int contentTop =
getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
Rect rect = new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rect);
int statusBarHeight = rect.top; //此处获取的是状态栏的高度;
int contentViewTop =
window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
//此处获取的是状态栏和标题栏的总高度;
//获取了状态栏和标题栏的总高度,也获取到了状态栏的高度,那么标题栏的高度就是:
int titleBarHeight = contentViewTop - statusBarHeight;
super.onWindowFocusChanged(hasFocus);
}
}