2015-12-21 94 views
0

我有一个用编程创建的视图填充的线性布局。我已经实现了拖放代码(如下所示),这样如果我触及任何视图的右侧,它们将以拖动模式启动。拖动模式本身工作正常,但我遇到的问题是找到放置视图的位置,以便它落在预期位置。我在这里先向您的帮助表示感谢!如何通过拖放找到将物品放置在linearlayout中的位置?

这里是图(或多个)的onTouchMethod:

view.setOnTouchListener(new View.OnTouchListener() { 
        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
         switch (event.getAction()) { 
          case MotionEvent.ACTION_DOWN: 
           if (Math.round(event.getX()) >= 720) { 
            ClipData data = ClipData.newPlainText("", ""); 
            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v); 
            v.startDrag(data, shadowBuilder, v, 0); 
            v.setVisibility(View.INVISIBLE); 
            return true; 
           } else { 
            return false; 
           } 
          default: 
           return false; 
         } 
        } 
       }); 

和这里是也放置在视图的onDragMethod:

view.setOnDragListener(new View.OnDragListener() { 
       @Override 
       public boolean onDrag(View v, DragEvent event) { 
        View view = (View) event.getLocalState(); 
        switch (event.getAction()) { 
         case DragEvent.ACTION_DRAG_STARTED: 
          break; 
         case DragEvent.ACTION_DROP: 
          LinearLayout owner = (LinearLayout) view.getParent(); 
          owner.removeView(view); 
          owner.addView(view, getNewViewPosition(fillView.indexOfChild(v), Math.round(v.getY()), Math.round(event.getY()))); 
          view.setVisibility(View.VISIBLE); 
          break; 
        } 
        return true; 
       } 
      }); 

终于在这里是getNewViewPosition方法:

public int getNewViewPosition(int currentPosition, int stationaryY, int floatingY) { 
     Toast.makeText(this, stationaryY + " and then " + floatingY, Toast.LENGTH_SHORT).show(); 
     if (floatingY - stationaryY <= 15) { 
      return currentPosition - 1; 
     } else { 
      return currentPosition + 1; 
     } 
    } 

回答

0

我明白了,因为我知道我的观点有52的高度我能够配制此代码:

public int getNewViewPosition(int currentPosition, int stationaryY, int floatingY) { 
     if (floatingY - stationaryY >= 13) { 
      return currentPosition - 1; 
     } else if (floatingY - stationaryY <= 39) { 
      return currentPosition + 1; 
     } else 
      return currentPosition; 
    }