拖动一个视图onLongClick并启动onClick活动

时间:2018-06-18 14:44:57

标签: java android motionevent onlongclicklistener ontouch

我正在用这个问题敲打我的脑袋,这可能很简单,但由于我是这个话题的新手,我还是无法弄明白。

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

问题,就像标题所说的那样,当我想加入这些功能时。我希望在用户长时间点击视图时调用onTouch方法,并且我希望在用户点击视图时启动新活动。

这是伪代码:

  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;
        }
    }
}

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

也许我试图以完全错误的方式做到这一点,但我一直在寻找一些文档,例如https://developer.android.com/training/gestures/但仍然不知道该怎么做。

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

1 个答案:

答案 0 :(得分:0)

因此,我提出了一个解决方案,该解决方案可能会或可能不是一个很好的解决方案,但现在它可以提供我的功能。如果有人有更好的解决方案,并认为我的方式不好,请说

代码如下:

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;
        }