2017-04-26 3 views
1

사용자가 드래그를 시작하자마자 드롭 대상을 표시하거나 추가하려고합니다.드래그 시작시 드롭 대상 표시

설명서에 ACTION_DRAG_STARTED을 수신했을 때 onDrag으로 처리해야한다고 설명되어 있으므로 View을 드래그를 허용 할 수있는 것으로 강조 표시하는 데 사용할 수 있습니다.

그러나 내보기 (실제로는 LinearLayout)는 끌기가 없을 때 달라야하고 끌기가 시작될 때 놓기 표적을 표시해야합니다.

일반보기 :

[Item A][Item B] 

드래그가 같아야 시작 : 빈 괄호가 드래그 드롭 할 수 위치를 나타냅니다 어디

[ ][Item A][ ][Item B][ ] 

.

나는 이것을 달성하기 위해 다음과 같은 일을 시도했다 :

1) 동적 동적 뷰

최상위 컨테이너가 ACTION_DRAG_STARTED를 수신를 추가 드롭 타겟 뷰를 추가 할 수 있습니다. 문제 : 새로 추가 된 조회수는 자신 (또는 다른 이벤트) 인 ACTION_DRAG_STARTED을받지 못하므로 드롭을 수락 할 수 없습니다.

if(event.getAction() == DragEvent.ACTION_DRAG_STARTED) { 
     // Make all containers visible: 
     for(int i = 0; i < cc.getChildCount(); i++) { 
     cc.getChildAt(i).setVisibility(View.VISIBLE); 
     } 
    } 

문제 :

2) 숨겨진 드롭

항상 사용할 수있는 실제 항목의 모든 시간 사이에 View.GONE 드롭 목표를 가지고 있고, 드래그를 시작할 때 단지 그들에게 View.VISIBLE을 대상으로 : 외관상으로는 View.GONE는보기가 이벤트를받지 않음을 의미합니다. View.INVISIBLE과 같은 것.

내 옵션은 무엇입니까? 드래그 시작/끝 때 일부 View.VISIBLE 및 동적 크기 조정을 어떻게 사용합니까? 정말 어리석은 것 같습니다 ...

더 좋은 제안이 있습니까?

+0

동적으로보기를 끌어 오는 수신기와 함께 동적으로 추가 할 수 있습니다. 여기에 onClick Listener를 사용하여 onClick Listener로 변경해보세요. http://stackoverflow.com/questions/8722595/how-to-add-onclicklistener-to -dynamically-generated-text-view/8722685 – Radwa

답변

1

startDrag() 또는 startDragAndDrop()을 호출하기 바로 전에 가시성을 변경해야합니다. 나는 this sample app (this chapter에서 this book까지, FWIW)에서 그것을 증명합니다. 당신이 태블릿에서 실행하는 경우

그 샘플에서

, 나는 RecyclerView에있는 항목의 긴 클릭에 끌어서 놓기 작업을 시작합니다 :

@Override 
    public boolean onLongClick(View v) { 
    if (listener!=null) { 
     listener.onStartDrag(); 
    } 

    ClipData clip=ClipData.newRawUri(title.getText(), videoUri); 
    View.DragShadowBuilder shadow=new View.DragShadowBuilder(thumbnail); 

    itemView.startDrag(clip, shadow, Boolean.TRUE, 0); 

    return(true); 
    } 

하지만 startDrag()를 호출하기 전에 , 나는 등록 된 청취자에게 내가 끌기를 시작하려한다는 것을 알린다. 그 청취자가 보이지 내 "핫스팟"드롭 대상 만드는 호스팅 활동이다

@Override 
    public void onStartDrag() { 
    info.setVisibility(View.VISIBLE); 
    } 

순 효과는 특정 "행동"이 나타나는 홈 화면에 가깝다 (예, 제거) 당신은 드래그를 시작할 때 .

처음에는 두 번째 방법을 시도했지만 작동하지 않았습니다. 내 생각에 startDrag() 또는 startDragAndDrop()을 호출하면 기본적으로 표시되는 드롭 대상 목록이 캡처되므로이 목록 이후에 해당 목록에 대한 변경 사항 (새 위젯, 새로 표시되는 위젯)은 아무런 영향을 미치지 않습니다.

+0

고마워,이 옳은 길에 나를 넣어 라! – john16384