2016-08-15 3 views
0

Android 프로그램에서 선형 뷰에서 한 위치에서 다른 위치로 이미지 뷰를 이동하려고합니다. 이미지 뷰가 드래그되고 있지만 위치에 배치하면 시작 위치로 되돌아갑니다. 내가 무엇을 할 수 있을지? 많이 봤지만 해결책을 찾지 못했습니다.Android 드래그 앤 드롭 - 이미지가 드래그되지 않음

내 OnTouch :

img.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       ClipData data = ClipData.newPlainText("", ""); 
       View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(img); 

       img.startDrag(data, shadowBuilder, img, 0); 
       img.setVisibility(View.INVISIBLE); 
       return true; 
      } else { 
       return false; 
      } 
     } 
    }); 

내 OnDrag은 :

linearLayout.setOnDragListener(new View.OnDragListener() { 
     @Override 
     public boolean onDrag(View v, DragEvent event) { 
      switch (event.getAction()) { 
       case DragEvent.ACTION_DROP: 
        View view = (View) event.getLocalState(); 
        ViewGroup owner = (ViewGroup) view.getParent(); 
        owner.removeView(view); 
        LinearLayout container = (LinearLayout) v; 
        container.addView(view); 
        view.setVisibility(View.VISIBLE); 
        Log.d(msg, "ACTION_DROP event"); 
        break; 
       default: 
        break; 
      } 
      return true; 
     } 
    }); 

답변

0

나는 추측은 이미 android drag and drop ImageView onTouchListener에 대답했다.

난 당신이 진저 브레드를 지원해야 할 경우에만 위의 젤리 빈을 지원해야하는 경우뿐만 아니라

여기 내 예제를

https://github.com/NAYOSO/android-dragview

를 좀 걸릴 수 있습니다 여기에 그 내용을 붙여 넣은 드래그를 사용하고 안드로이드 라이브러리에서 삭제할 수 있습니다이 문서

http://developer.android.com/guide/topics/ui/drag-drop.html

에서 볼 수 있습니다

먼저 끌어서 놓기보기에 대한 설명을 보려면 터치 리스너를 만든 다음 startDrag를 호출하여 드레 이깅을 시작해야합니다. 저것과 같이 쉬운.

민간 최종 클래스 dragTouchListener은 onDragListener 사용할 수있는 장소를 삭제의 대상을 모니터링하려면 OnTouchListener {

@Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v); 
      v.startDrag(data, shadowBuilder, v, 0); 
      return true; 
     } else { 
      return false; 
     } 
    } 

} 

를 구현

개인 클래스 dropListener 당신으로 OnDragListener {

View draggedView; 
CustomTextView dropped; 

@Override 
public boolean onDrag(View v, DragEvent event) { 
    switch (event.getAction()) { 
    case DragEvent.ACTION_DRAG_STARTED: 
     draggedView = (View) event.getLocalState(); 
     dropped = (CustomTextView) draggedView; 
     draggedView.setVisibility(View.INVISIBLE); 
     break; 
    case DragEvent.ACTION_DRAG_ENTERED: 
     break; 
    case DragEvent.ACTION_DRAG_EXITED: 
     break; 
    case DragEvent.ACTION_DROP: 

     CustomTextView dropTarget = (CustomTextView) v; 
     dropTarget.setText(dropped.getText().toString()); 
     break; 
    case DragEvent.ACTION_DRAG_ENDED: 
     break; 
    default: 
     break; 
    } 
    return true; 
} 

} 구현 내 코드에서 볼 수있는 많은 이벤트가 있지만 주된 것은보기가 무수한 상태로 시작될 때입니다. gged, 하락 및 종료.

이 볼 수있는 리스너를 설정하는 것을 잊지 마세요

tvDrag.setOnTouchListener(new dragTouchListener()); 
tvDrop.setOnDragListener(new dropListener())