拖一个view onLongClick 开始activity onClick

Drag a view onLongClick and start activity onClick

我正在为这个问题苦恼,这个问题可能很简单,但由于我是这个主题的新手,所以我还没有弄明白。

我已经使用 onTouch 方法成功实现了拖动视图。我还成功实施了 onLongClickonClick 方法。但是这两个功能都是分开实现的。

问题,如标题所说,是我想加入这些功能的时候。我希望在用户长按视图时调用 onTouch 方法,并且我希望在用户单击视图时启动新的 activity 方法。

这是伪代码:

  public class Website extends AppCompatActivity implements View.OnTouchListener{

    TextView longpress;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_website);

    longpress = (TextView) findViewById(R.id.longpress);
    longpress.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View view){
           //I don't really know how to do this part
           onTouch(View view, Motion Event event);
           return true;
        }
    });
    longpress.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            //Code for new activity comes here (I know how to do this part)
        }
    });
    }

     public boolean onTouch(View view, MotionEvent event) {
        switch(event.getAction(){
           case MotionEvent.ACTION_DOWN:
                //Save initial coordinates of view <-- view.getX(), view.getY() 
                break;
           case MotionEvent.ACTION_MOVE:
                //Calculate dX and dY and setX and Y of the view (move view)
                break;
           case MotionEvent.ACTION_UP:
                //If view is certain distance away from initial points do something
                break;
        }
    }
}

就像我说的,如果我不尝试从 onLongClick 方法调用它,onTouch 会自行运行。如果我尝试从 onLongClick 方法 调用 onTouch(View view, MotionEvent event),则会出现问题,因为 onLongClick 只接收两个参数中的一个 onTouch 方法应该接收 onLongClick 只接收视图参数,但它也应该接收事件参数)。

也许我正在尝试以完全错误的方式执行此操作,但我一直在查看一些文档,例如https://developer.android.com/training/gestures/ 但仍然不知道该怎么做。

(我希望在 android 手机上具有与通知类似的功能)

所以我找到了一个解决方案,它可能是也可能不是一个好的解决方案,但现在它可以满足我的功能。如果有人有更好的解决方案并且认为我的在某些方面不好,请这样说。

代码如下:

boolean flag;
public boolean onTouch(View view, MotionEvent event){
    int action = event.getAction() & MotionEvent.ACTION_MASK;
        if(action == MotionEvent.ACTION_DOWN){
            //do something on a down press
            flag = true;
            return true;
        }
        if(action == MotionEvent.ACTION_UP && flag == true){
            //do something if we move finger away from screen we 
            //didn't move the view first

            return true;
        }
        if(action == MotionEvent.ACTION_UP && flag == false){
            //do something if we move finger away from screen and we moved 
            //the view before we moved the finger away from screen
        }
        if(action == MotionEvent.ACTION_MOVE){
            //do something when moving the view
            flag = false;
        }