我有一个包含text
并包装它的布局。我需要在屏幕上垂直移动layout
。
这就是我的工作。
View valuesContainer = view.findViewById(R.id.valuesContainer);
valuesContainer.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) v.getLayoutParams();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
oldY = (int)event.getRawY();
initialTopMargin = params.topMargin;
break;
case MotionEvent.ACTION_MOVE:
newY = (int)event.getY();
params.topMargin = (int) (initialTopMargin - (oldY - newY));
v.setLayoutParams(params);
}
break;
}
return true;
}
});
这会在屏幕上垂直移动布局。但是现在,当我退出屏幕的手指时,我需要这个布局回到原来的位置。
任何代码都是适当的
答案 0 :(得分:2)
试试这个:
case MotionEvent.ACTION_UP:
params.topMargin = initialTopMargin;
v.setLayoutParams(params);
答案 1 :(得分:2)
使用 ACTION_UP 将布局移回原位。下面是代码。试试吧。
View valuesContainer = view.findViewById(R.id.valuesContainer);
valuesContainer.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) v.getLayoutParams();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
oldY = (int)event.getRawY();
initialTopMargin = params.topMargin;
break;
case MotionEvent.ACTION_MOVE:
newY = (int)event.getY();
params.topMargin = (int) (initialTopMargin - (oldY - newY));
v.setLayoutParams(params);
break;
case MotionEvent.ACTION_UP:
params.topMargin = initialTopMargin;
v.setLayoutParams(params);
break;
}
return true;
}
});
答案 2 :(得分:1)
获得ACTION_DOWN
事件时存储初始pos。处理ACTION_UP
事件,然后再将其设置为顶部。如果你想要它是平滑的,启动一个新的线程来更新值并等待或等等。