有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在安卓上拖放一个按钮。。帮助

我试图拖放一个按钮,问题是当我在motion event中使用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;
}

}


共 (1) 个答案

  1. # 1 楼答案

    我也一直在研究触摸和移动物体。我开始做一些类似的动作:改变顶部和左侧的填充物。很快,当我在屏幕上添加更多可移动的对象时,事情变得有点混乱。我会触摸屏幕上的一个点,其他东西就会开始移动。当时的情况是,屏幕上有多个重叠的视图。只有俯视图才会接收触摸事件

    我发现了一篇帖子,建议大家看看安卓启动器的代码,看看它们是如何拖放的。我认为他们的方法真的很好。您确实需要添加一个视图组来保存可移动对象,但这是可行的。浏览范围与你在屏幕上看到的内容相匹配,你最终不会感到意外。事件会转到您期望的视图

    如果事实证明你将拥有不止一个可移动的对象,你可能想看看我的博客帖子:“Moving Views In Android”。还有更多关于Android启动器和源代码的解释