gpt4 book ai didi

Android 在触摸事件上移动 View

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:36:43 24 4
gpt4 key购买 nike

我想将两个不同的 View 移动到我的布局中,以便用户可以按照他的意愿显示它。

到目前为止,我编写了以下代码来处理触摸事件:

this.viewEvent.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event)
{
final int y = (int) event.getRawY();

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams();
switch (event.getAction() & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
element.setEventY(y - params.topMargin);
break;

case MotionEvent.ACTION_UP:
viewGroup.invalidate();
break;

case MotionEvent.ACTION_POINTER_DOWN:
case MotionEvent.ACTION_POINTER_UP:
break;

case MotionEvent.ACTION_MOVE:
params.topMargin = y - element.getEventY();
params.bottomMargin = screenHeight - view.getHeight() - params.topMargin;

// Avoid out of screen
if (params.topMargin < 0) return true;

// Apply changes
view.setLayoutParams(params);
break;
}

return true;
}
});

element 是一个自定义对象的实例来处理位置。screenHeightDisplay 类给定的屏幕高度。

我可以移动该元素,但当我触摸它时它会闪烁,一旦我抬起手指, View 就会消失。我什至无法找回它,它就在屏幕之外。

我是不是做错了什么?

谢谢你的帮助

最佳答案

使用以下代码执行简单的触摸移动:

layout_counter.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event)
{
if (currentState != State.EDIT_MOVE) return false;

FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams();
if (view.getId() != R.id.layout_counter) return false;

switch (event.getAction())
{
case MotionEvent.ACTION_MOVE:
params.topMargin = (int) event.getRawY() - view.getHeight();
params.leftMargin = (int) event.getRawX() - (view.getWidth() / 2);
view.setLayoutParams(params);
break;

case MotionEvent.ACTION_UP:
params.topMargin = (int) event.getRawY() - view.getHeight();
params.leftMargin = (int) event.getRawX() - (view.getWidth() / 2);
view.setLayoutParams(params);
break;

case MotionEvent.ACTION_DOWN:
view.setLayoutParams(params);
break;
}

return true;
}
});

layout_counter 是您要移动的 View 。

不要忘记将可移动元素放入 FrameLayout

关于Android 在触摸事件上移动 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23120807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com