【问题标题】:How a move-able button when pressed performs something按下时可移动按钮如何执行某些操作
【发布时间】:2015-03-18 07:44:11
【问题描述】:

我为一个可以通过手指按下移动或拖动的按钮编写了所有代码,现在我还希望该按钮在单击时执行某些操作(例如,在我的情况下单击时转到网站) 我在一个单独的类中实现了所有代码,如下所示:

public class MultiTouchListener implements OnTouchListener
{





private float mPrevX;
private float mPrevY;

public MainActivity mainActivity;
public MultiTouchListener(MainActivity mainActivity1) {
    mainActivity = mainActivity1;
}

@Override
public boolean onTouch(View view, MotionEvent event) {
    float currX,currY;
    int action = event.getAction();
    switch (action ) {
        case MotionEvent.ACTION_DOWN: {




            mPrevX = event.getX();
            mPrevY = event.getY();
            break;
        }

        case MotionEvent.ACTION_MOVE:
        {

                currX = event.getRawX();
                currY = event.getRawY();


                MarginLayoutParams marginParams = new MarginLayoutParams(view.getLayoutParams());   
                marginParams.setMargins((int)(currX - mPrevX), (int)(currY - mPrevY),0, 0);
                RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams);
                view.setLayoutParams(layoutParams); 


            break;
        }



        case MotionEvent.ACTION_CANCEL:
            break;

        case MotionEvent.ACTION_UP:

            break;
    }

    return true;
}



}

我在我的主要活动中这样称呼它

  MultiTouchListener touchListener=new MultiTouchListener(this);
                onButton.setOnTouchListener(touchListener);

可移动的拖放按钮工作正常,我只想让这个按钮在按下时打开一个网站链接,我必须在我的代码中进行哪些更改才能执行此操作。谢谢。

【问题讨论】:

    标签: android eclipse


    【解决方案1】:

    在 onTouchListener 中的ACTION_UP 下,您必须手动调用view.performClick()。这将触发您的 onclick 侦听器,然后您可以使用它来打开您的网页。

    所以是这样的:

    case MotionEvent.ACTION_UP:
        view.performClick();
        break;
    

    然后

        onButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //do stuff
            }
        });
    

    编辑

    嗯。所以显然这样做会淹没它的拖放方面。试试这个(来自here 并为你的班级做了一些修改)。

    在您的 ontouch 课程中:

    //create a gesturedetector
    private GestureDetector gestureDetector = new GestureDetector(this, new SingleTapConfirm());
    
    @Override
    public boolean onTouch(View view, MotionEvent event) {
    //...etc
    switch (action ) {
        if (gestureDetector.onTouchEvent(view)) {
                    // this is a "click", put your click event here
                    return true;
        } else {
               //your original touch drag and drop code should go here
               case MotionEvent.ACTION_DOWN: {
               //...
               }
    
               case MotionEvent.ACTION_MOVE:
               {
                //...
               break;
               }
               //etc
        }
    
    }
    
        return false;
    }
    
    
    private class SingleTapConfirm extends SimpleOnGestureListener {
    
        @Override
        public boolean onSingleTapConfirmed(MotionEvent event) {
            return true;
        }
    }
    

    }

    有了这个,您应该不再需要 onclick 监听器了。看看这是否有效。

    【讨论】:

    • 在 onButton.setOnClickListener 上显示错误,甚至无法启动另一个活动,它说 startactivity 没有为 ontouchlistener 定义
    • 你在哪里定义你的 onclick 监听器?它应该在您的主要活动中,而不是 ontouchlistener。
    • 正如我提到的,我做了一个不同的课程。
    • and i call it in my main activity by this
    • 一开始也是这样,但它并没有真正起作用,它把我带到了网站,但按钮没有比拖动更方便
    猜你喜欢
    • 2012-11-15
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多