2013-08-01 19 views
10

Tôi đang tạo một ứng dụng trò chơi, nơi tôi cần sử dụng ondraglistener để kéo và thả ở đây những gì tôi đang làm trên một lớp thực hiện onDraglistener.kéo và thả với onDraglistener animate để quay trở lại vị trí ban đầu nếu không bị rơi vào mục tiêu

@Override 
public boolean onDrag(View v, DragEvent event) { 
    switch (event.getAction()) { 
    case DragEvent.ACTION_DRAG_STARTED: 
     Log.v("here","drag started"); 
     //no action necessary 
     break; 
    case DragEvent.ACTION_DRAG_ENTERED: 
     //no action necessary 
     Log.v("here","drag enteres"); 
     break; 
    case DragEvent.ACTION_DRAG_LOCATION: 
    int mCurX = (int) event.getX(); 
    int mCurY = (int) event.getY(); 
    Log.v("Cur(X, Y) : " ,"here ::" + mCurX + ", " + mCurY); 
    break; 
    case DragEvent.ACTION_DRAG_EXITED:   
     //no action necessary 

     Log.v("here","drag exits"); 
     break; 
    case DragEvent.ACTION_DROP: 
      .................do what ever when dropped... 
    } 

đây những gì tôi đang làm trên touchlistener của một cái nhìn được draged và thả:

public boolean onTouch(View view, MotionEvent motionEvent) { 
    if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { 
     /* 
     * Drag details: we only need default behavior 
     * - clip data could be set to pass data as part of drag 
     * - shadow can be tailored 
     */ 
     view.setTag("option"+index); 
     ClipData data = ClipData.newPlainText("tag", "option"+index); 
     shadowBuilder = new View.DragShadowBuilder(view); 

     //start dragging the item touched 
     view.startDrag(data, shadowBuilder, view, 0); 


     offsetX = (int)view.getX();//(int)motionEvent.getX(); 
     offsetY = (int)view.getY();//motionEvent.getY(); 
     Log.v("here","it is ::" + (int)motionEvent.getX() + " , "+(int)motionEvent.getY()); 

     return false; 
} 

Bây giờ nó xây dựng các builder bóng mà bị kéo vào bất cứ nơi nào bạn kéo ngón tay. Bây giờ làm thế nào tôi có thể tạo hiệu ứng cho trình tạo bóng hoặc khung nhìn quay trở lại vị trí của nó khi không bị rơi xuống mục tiêu. Tôi đã thử public boolean onInterceptTouchEvent (MotionEvent event) và di chuyển đến view cha và lấy x, y position và animation nó quay trở lại vị trí ban đầu của nó nhưng nó bị hủy bỏ action. Có cách nào để có được x, y tọa độ đến một vị trí mà khung nhìn đã giảm khác rồi đến đích. Sau đó, tôi sẽ có thể animate nó giữa positions.Thanks trước

+0

Hãy thử Đó: http://stackoverflow.com/questions/20741022/drag- và thả-di chuyển-trở lại-thành-gốc-vị trí-sau-khi-bỏ-trên-mục tiêu-với-bóng/20784464 # 20784464 –

+0

Xin chào! @ karan, tìm thấy giải pháp nào cho vấn đề của bạn? – Vijju

+0

@ karan421. Bạn đã tìm ra được giải pháp nào chưa? – Beena

Trả lời

-3

Bạn cần phải xử lý thả:

switch (event.getAction()) { 
    case DragEvent.ACTION_DRAG_ENTERED: 
    //break here was removed in purpose so you can see the shadow and the element is still at its initial place. 
    case DragEvent.ACTION_DROP: 
      View view = (View) event.getLocalState(); 
     if (prioritiesList.contains(v)) { 

      ViewGroup viewgroup = (ViewGroup) view.getParent(); 
      viewgroup.removeView(view); 

      LinearLayout containView = (LinearLayout) v; 
      containView.addView(view); 
      view.setVisibility(View.VISIBLE); 
        break; 
} 
Các vấn đề liên quan