实现思路
- 1 获取当前window窗体的height /width
- 2 ui控件的滑动触摸监听事件(OnTouchListener())(action_down/action_move/action_up)
- 3 获取手势按下控件的坐标
- 4 在移动move监听时算出坐标差 控件原始的坐标加上坐标差就是移动过后的新坐标值
public classTouchButtonActivityextendsAppCompatActivity{
privateImageViewicon;
private intscreenHegiht ;
private intscreenWidth ;
privateSharedPreferencessp;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_toch_button);
DisplayMetrics metrics = newDisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(metrics);
this.screenHegiht = metrics.heightPixels;
this.screenWidth = metrics.widthPixels;
icon = (ImageView) findViewById(R.id.icon_imag);
sp = this.getSharedPreferences("config", MODE_PRIVATE);
intlastx = this.sp.getInt("lastx", 0);
intlasty = this.sp.getInt("lasty", 0);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) this.icon
.getLayoutParams();
params.leftMargin = lastx;
params.topMargin = lasty;
this.icon.setLayoutParams(params);
this.icon.setOnTouchListener(newView.OnTouchListener() {
intstartX;
intstartY;
@Override
public booleanonTouch(View v, MotionEvent event) {
switch (event.getAction()) {
caseMotionEvent.ACTION_DOWN:
this.startX = (int) event.getRawX();
this.startY = (int) event.getRawY();
break;
caseMotionEvent.ACTION_MOVE:
intnewX = (int) event.getRawX();
intnewY = (int) event.getRawY();
intdx = newX - this.startX;
intdy = newY - this.startY;
intl = TouchButtonActivity.this.icon.getLeft();
intr = TouchButtonActivity.this.icon.getRight();
intt = TouchButtonActivity.this.icon.getTop();
intb = TouchButtonActivity.this.icon.getBottom();
intnewt = t + dy;
intnewb = b + dy;
intnewl = l + dx;
intnewr = r + dx;
if ((newl < 0) || (newt < 0)
|| (newr > TouchButtonActivity.this.screenWidth)
|| (newb > TouchButtonActivity.this.screenHegiht)) {
break;
}
TouchButtonActivity.this.icon.layout(newl, newt, newr, newb);
this.startX = (int) event.getRawX();
this.startY = (int) event.getRawY();
break;
caseMotionEvent.ACTION_UP:
intlastx = TouchButtonActivity.this.icon.getLeft();
intlasty = TouchButtonActivity.this.icon.getTop();
SharedPreferences.Editor editor = TouchButtonActivity.this.sp.edit();
editor.putInt("lastx", lastx);
editor.putInt("lasty", lasty);
editor.commit();
break;
default:
break;
}
return true;
}
});
}
}