2015-12-21 100 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; 
    }