gpt4 book ai didi

java - 在android上拖放一个按钮..帮助

转载 作者:行者123 更新时间:2023-11-29 08:15:53 25 4
gpt4 key购买 nike

我正在尝试拖放一个按钮,问题是当我在运动事件中使用 getX() 时它可以工作,但按钮开始颤抖。当我调用方法 getRawX() 时,它不会颤抖,但在我开始拖放之前它至少跳了 80px。

我该怎么做,我会在这里发布我的代码:

    public class MyButton extends Button {

private final static int START_DRAGGING = 0;
private final static int STOP_DRAGGING = 1;

private int status;
private LinearLayout parentLayout;

public MyButton(Context context) {
super(context);

}

public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);

}

public MyButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);

}

@Override
public boolean onTouchEvent(MotionEvent event) {


// Log.i("teste", "Button width: " + btWidth + ", Height : "+ btHeight);

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
status = START_DRAGGING;
Log.i("teste", "Coordenada on ACTION_DOWN: " + (int) event.getRawX());
break;
case MotionEvent.ACTION_UP:
status = STOP_DRAGGING;
Log.i("teste", "Coordenada on ACTION_UP: " + (int) event.getRawX());
break;
case MotionEvent.ACTION_MOVE:
if(status == START_DRAGGING){
parentLayout.setPadding((int)event.getRawX(), 0,0,0);
parentLayout.invalidate();
Log.i("teste", "Coordenada on ACTION_MOVE: " + (int) event.getRawX());
}
break;

}

return true;
}

最佳答案

event.getX() 返回相对于您的 View (按钮)的触摸坐标,event.getRawX() 返回相对于显示器的触摸坐标,所以我会认为第一种方法是正确的,如果您设置按钮 的填充,而不是布局。但是您仍然会遇到“跳跃”问题,因为您应该触摸按钮,而不是它的边缘,并且第一步会将边缘放在您的手指下。

我会尝试使用 GestureDetector,它的 OnGestureListener 有一个 onScroll() 方法,可以为您提供滚动距离(它完成了这项工作记住最后一个位置并给出一个相对运动),这样你就可以将该值添加到填充中,也就是说,你拖动 10px => 你添加了 10px 的填充。

代码示例:

private GestureDetector gd =
new GestureDetector(getContext(), new SimpleOnGestureListener() {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
setPadding((int)(getPaddingLeft()+distanceX),0,0,0);
}
@Override
public boolean onDown(MotionEvent e) {
return true; // else no event will be handled
}

我还会添加一些检查以防止负填充或过多填充。

关于java - 在android上拖放一个按钮..帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4924038/

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