實現思路
- 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);
//獲取window寬度和高度(sdk13版本使用的方法官方已經廢棄)
/* this.screenHegiht = this.getWindowManager().getDefaultDisplay().getHeight();
this.screenWidth = this.getWindowManager().getDefaultDisplay().getWidth();*/
//官方推薦的方法
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);
//設置坐標數據到ImageView控件上
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) this.icon
.getLayoutParams();
params.leftMargin = lastx;
params.topMargin = lasty;
this.icon.setLayoutParams(params);
/**
* ImageView的滑動監聽事件
*/
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;//true事件傳遞OnTouch消費不再向上一級傳遞false在一次傳遞到上一級操作頁面
}
});
}
}
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。