【发布时间】:2017-12-26 13:15:12
【问题描述】:
我有一个活动,它由工具栏、底部菜单(类似于 instagram)和一个位于屏幕右下角的小可拖动 relativeLayout 组成,宽度和高度 = 500dp。
我在该 relativeLayout 上实现了如下拖动:
public void touchListenerPip(RelativeLayout relativeLayoutPIP) {
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
float screenHeight = displayMetrics.heightPixels;
float screenWidth = displayMetrics.widthPixels;
relativeLayoutPIP.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
float newX, newY;
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
dX = view.getX() - event.getRawX();
dY = view.getY() - event.getRawY();
lastAction = MotionEvent.ACTION_DOWN;
break;
case MotionEvent.ACTION_MOVE:
newX = event.getRawX() + dX;
newY = event.getRawY() + dY;
if ((newX <= 0 || newX >= screenWidth - view.getWidth()) || (newY <= 0 || newY >= screenHeight - view.getHeight())) {
lastAction = MotionEvent.ACTION_MOVE;
break;
}
//to block the view being dragged out of toolbar
if (newY < (float) toolbar.getHeight()) {
lastAction = MotionEvent.ACTION_MOVE;
break;
}
//to block the view being dragged out of bottombar
if (event.getRawY() + (float) view.getHeight() > screenHeight - (float) bottomBar.getHeight()) {
lastAction = MotionEvent.ACTION_MOVE;
break;
}
view.setX(newX);
view.setY(newY);
lastAction = MotionEvent.ACTION_MOVE;
break;
case MotionEvent.ACTION_UP:
if (lastAction == MotionEvent.ACTION_DOWN)
break;
default:
return false;
}
return true;
}
});
}
视图拖动正常,拖动不流畅。有什么平滑拖动视图的建议吗?
【问题讨论】:
-
查看link。
标签: android draggable ontouchlistener