2017-12-17 16 views
-1

내부에 다섯 개의 뷰가있는 LinearLayout이 있는데, 이들은 1x5 그리드를 형성합니다.드래그 된 객체를 드래그의 원점에 정렬하는 방법은 무엇입니까?

이 LinearLayout이 드래그됩니다.

5 개의 뷰 각각에서 onTouchListeners를 설정하고, 드래그 한 항목 중 5 개가 드래그 된 항목을 확인하고 LinearLayout에서 motionEvent.getAction()을 호출하도록 설정하고 있습니다. 이 끌기 시작 지점으로 중심이고하지 않음으로써있는 LinearLayout 드래그되기 때문에

이 불완전하다. 드래그하는 동안

드래그가에서 유래보기 때문에 motionEvent의 시작 부분에있는 LinearLayout을 변환 할 수있는 방법이 있습니까 손가락 아래? 있는 LinearLayout

private final class MyTouchListener implements View.OnTouchListener { 
    //public boolean onTouch(View view, MotionEvent motionEvent) { 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     LinearLayout ship = (LinearLayout)view.getParent(); 
     dragCellIndex = ship.indexOfChild(view); 
     dragCellTotal = ship.getChildCount(); 
     view = ship; 

     if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {    
      ClipData data = ClipData.newPlainText("", ""); 
      View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view); 
      view.startDrag(data, shadowBuilder, view, 0); 
      view.setVisibility(View.INVISIBLE); 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 
+0

일부 시도를 했습니까? 일부 코드를 작성 했습니까? –

+0

나는 원래 게시물에 사용하고있는 터치 리스너를 추가했습니다. LinearLayout에 드래그 원의 왼쪽과 오른쪽, 왼쪽 setTranslationX (cell.length() * - 1) 및 오른쪽 setTranslationX (cell.length())의 셀 수를 확인했습니다. 그것은 아무것도 바뀌지 않았습니다. –

답변

1

이렇게하려면 내부의 다섯 뷰의 각 설정

MyTouchListener, 당신은 수학 계산의 비트를하고 싶습니다. 손가락의 터치를 감지하거나 X 및 Y 좌표를 motionEvent에서 드래그하여 LinearLayout의 왼쪽 위 모서리의 X 및 Y 좌표와의 차이를 계산하고 두 변수 내에 저장합니다.

이 방법, 당신이있는 LinearLayout을 드래그하면, 당신은 단순히 X에 이러한 변수를 추가하고 Y 좌표와 그 시점에있는 LinearLayout 이동합니다. 네가 그 아이디어를 얻길 바랍니다. 카드 게임을 개발하는 동안 나는이 방법을 사용했습니다

는 매력처럼 작동합니다.

+0

MotionEvent()를 호출하거나 삭제할 때 X 및 Y 좌표를 LinearLayout에 추가해야합니까? –

+0

아이디어는 - 첫 번째 터치 (ACTION_DOWN)에서 getX() 및 getY() 메소드를 사용하여 onTouchEvent (MotionEvent motionEvent) 내부의 motionEvent에서 X 및 Y 좌표를 가져옵니다. LinearLayout의 X와 Y로 거리 (해당 좌표 간의 차이)를 계산하고 일부 변수에 저장합니다. 그런 다음 ACTION_MOVE에서 이러한 변수를 사용하여 저장된 좌표를 추가하여 LinearLayout의 이동을 조정합니다. –