2014-02-20 55 views
3

我已经在我的应用程序中实现了按钮拖动,但它工作的问题是为什么我拖动按钮是出侧的一边无法看到按钮。但修复它。我需要拖动屏幕一侧。我曾尝试下面的代码,如果任何错误指正,如何避免Android按钮拖出屏幕侧

@Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
      final int d_X = (int) event.getRawX(); 
      final int d_Y = (int) event.getRawY(); 
      PointF start = new PointF(); 

      switch (event.getAction() & MotionEvent.ACTION_MASK) { 
       case MotionEvent.ACTION_DOWN: 
        start.set(event.getX(),event.getY()); 
        if(shouldAllowToDrag) // if it true then i will allow to drag. 
        { 
         RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) v.getLayoutParams(); 
         _xDelta = d_X - lParams.leftMargin; 
         _yDelta = d_Y - lParams.topMargin; 
        } 
        else 
        { 
         //check for double click 
         long pressTime = System.currentTimeMillis(); 
         // If double click... 
         String buttonTitle = moveButton.getText().toString(); 
         if (pressTime - lastPressTime <= DOUBLE_PRESS_INTERVAL) { 
          Log.i(TAG,"doubleTappedistrue"); 

          hasLatchedDown = false; 
          if(buttonTitle.equals("Unlocked")) 
          { 
           hasButtonUnlocked = false; 
           moveButton.setText("Locked"); 
          } 
          else if(buttonTitle.equals("Locked")) 
          { 
           hasButtonUnlocked = true; 
           moveButton.setText("Unlocked"); 
          } 
         } 
         else 
         { 
          hasLatchedDown = true; 
          buttonLastStateText = buttonTitle; 
          moveButton.setText("Unlocked"); 
         } 
         lastPressTime = pressTime; 

        } 
        break; 
       case MotionEvent.ACTION_UP: 
        if(!shouldAllowToDrag) 
        { 
         if(hasLatchedDown) 
         { 
          hasLatchedDown = false; 
          moveButton.setText(buttonLastStateText); 
         } 
        } 
        break; 
       case MotionEvent.ACTION_POINTER_DOWN: 
        break; 
       case MotionEvent.ACTION_POINTER_UP: 
        break; 
       case MotionEvent.ACTION_MOVE: 
        if(shouldAllowToDrag){ 
         View parentView = (View) v.getParent(); 
         parentView.getWidth(); 
         parentView.getHeight(); 
         imageView.getWidth(); 
         RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) v.getLayoutParams(); 
         layoutParams.leftMargin = d_X - _xDelta; 
         layoutParams.topMargin = d_Y - _yDelta; 

        v.setLayoutParams(layoutParams); 
        } 




        break; 
      } 
      return true; 
    } 

回答

2

您应该添加一个最小值/最大值检查:

layoutParams.leftMargin = Math.min(Math.max(d_X - _xDelta,0), parentView.getWidth() - layoutParams.width); 

为TOPMARGIN同样的想法。 (代码不检查) 让我知道这是否有帮助。