Android 拖放按钮?
我只想在Y方向拖放一个按钮。我实现了这个功能。但它跨越了屏幕边界,消失了。请帮助我实现我的目标 这是我的密码Android 拖放按钮?,android,android-layout,Android,Android Layout,我只想在Y方向拖放一个按钮。我实现了这个功能。但它跨越了屏幕边界,消失了。请帮助我实现我的目标 这是我的密码 public class ChoiceTouchListener implements View.OnTouchListener{ @Override public boolean onTouch(View view, MotionEvent motionEvent) { int x = (int) motionEvent.getRawX()
public class ChoiceTouchListener implements View.OnTouchListener{
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
int x = (int) motionEvent.getRawX();
int y = (int) motionEvent.getRawY();
DisplayMetrics metrics = getResources().getDisplayMetrics();
switch (motionEvent.getAction() & MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_DOWN:
RelativeLayout.LayoutParams tparams = (RelativeLayout.LayoutParams) view.getLayoutParams();
changey = y- tparams.topMargin;
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_POINTER_UP:
break;
case MotionEvent.ACTION_MOVE:
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams();
params.topMargin = y-changey;
view.setLayoutParams(params);
break;
}
rootlayout.invalidate();
return true;
}
}
您可以使用此选项将视图限制在屏幕边界
int width=cropperLayout.getLayoutParams().width;;
int height=cropperLayout.getLayoutParams().height;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
dX = v.getX() - event.getRawX();
dY = v.getY() - event.getRawY();
return true;
case MotionEvent.ACTION_MOVE:
if (width == windowWidth && height == windowHeight){}
else {
v.animate()
.x(event.getRawX() + dX)
.y(event.getRawY() + dY)
.setDuration(0)
.start();
if (event.getRawX() + dX + width > windowWidth) {
v.animate()
.x(windowWidth - width)
.setDuration(0)
.start();
}
if (event.getRawX() + dX < 0) {
v.animate()
.x(0)
.setDuration(0)
.start();
}
if (event.getRawY() + dY + height > windowHeight) {
v.animate()
.y(windowHeight - height)
.setDuration(0)
.start();
}
if (event.getRawY() + dY < 0) {
v.animate()
.y(0)
.setDuration(0)
.start();
}
return true;
}
int-width=croperLayout.getLayoutParams().width;;
int height=croperLayout.getLayoutParams().height;
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
dX=v.getX()-event.getRawX();
dY=v.getY()-event.getRawY();
返回true;
case MotionEvent.ACTION\u移动:
如果(宽度==窗口宽度和高度==窗口高度){}
否则{
v、 制作动画()
.x(event.getRawX()+dX)
.y(event.getRawY()+dY)
.setDuration(0)
.start();
if(event.getRawX()+dX+width>windowWidth){
v、 制作动画()
.x(窗宽-宽度)
.setDuration(0)
.start();
}
if(event.getRawX()+dX<0){
v、 制作动画()
.x(0)
.setDuration(0)
.start();
}
if(event.getRawY()+dY+height>windowHeight){
v、 制作动画()
.y(窗高-高度)
.setDuration(0)
.start();
}
if(event.getRawY()+dY<0){
v、 制作动画()
.y(0)
.setDuration(0)
.start();
}
返回true;
}
查看onTouch的参数。您可以在onTouch中编写代码,并用view替换v。非常感谢。这对实现我的目标帮助不大