2013-02-01 10 views
5

में ड्रैग और ड्रॉप करता हूं तो मैंने ड्रैग व्यू ड्रैग और ड्रॉप किया। पहली ड्रैग और ड्रॉप को छोड़कर सब कुछ पूरी तरह से काम करता है। मुझे कारण नहीं मिल रहा है कि यह पहली बार क्यों खुश होता है।गायब ImageView स्रोत पहली बार जब मैं अपने ग्रिड व्यू

पहली बार जब मैं ग्रिडव्यू में अन्य वस्तुओं पर एक आइटम खींचता हूं, तो आइटम के इमेजव्यू स्रोत खो जाते हैं। जब मैं इसे छोड़ देता हूं तो स्रोत तय किए जाएंगे .. उसके बाद हर चीज सामान्य काम करेगी। कोई विचार है कि मैं इसे कैसे या अजीब व्यवहार के कारण को ठीक कर सकता हूं। हर मदद का स्वागत है।

mGridView.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       GridView parent = (GridView) v; 

       int x = (int) event.getX(); 
       int y = (int) event.getY(); 

       int position = parent.pointToPosition(x, y); 
       if (position > AdapterView.INVALID_POSITION) { 

        int count = parent.getChildCount(); 
        for (int i = 0; i < count; i++) { 
         View curr = parent.getChildAt(i); 
         curr.setOnDragListener(new View.OnDragListener() { 

          @Override 
          public boolean onDrag(View v, DragEvent event) { 

           boolean result = true; 
           int action = event.getAction(); 
           switch (action) { 
           case DragEvent.ACTION_DRAG_STARTED: 
            break; 
           case DragEvent.ACTION_DRAG_LOCATION: 
            break; 
           case DragEvent.ACTION_DRAG_ENTERED:  
            setBlueFilterOnImageView((ImageView) v, getActivity()); 
            break; 
           case DragEvent.ACTION_DRAG_EXITED: 
            clearColorFilterOnImageView((ImageView) v); 
            break; 
           case DragEvent.ACTION_DROP: 

            if (event.getLocalState() == v) { 
             result = false; 
            } else { 

             View droped = (View) event.getLocalState(); 

             View target = v; 

             app.myProfile().removeProfilePhotoAtIndex(((DragGridItemHolder) droped.getTag()).position); 
             app.myProfile().insertProfilePhoto(((DragGridItemHolder) droped.getTag()).id, ((DragGridItemHolder) target.getTag()).position); 


             mAdapter.notifyDataSetChanged(); 

            } 
            break; 
           case DragEvent.ACTION_DRAG_ENDED: 
            clearColorFilterOnImageView((ImageView) v);  
            break; 
           default: 
            result = false; 
            break; 
           } 
           return result; 
          } 
         }); 
        } 

        int relativePosition = position - parent.getFirstVisiblePosition(); 


        View target = (View) parent.getChildAt(relativePosition); 

        DragGridItemHolder holder = (DragGridItemHolder) target.getTag(); 
        String text = holder.id; 
        ClipData data = ClipData.newPlainText("DragData", text); 
        target.startDrag(data, new View.DragShadowBuilder(target), target, 0); 
       } 
      } 
      return false; 
     } 
    }); 

संपादित

public static void setBlueFilterOnImageView(ImageView imageView, Context context){ 
    PorterDuffColorFilter blueFilter = new PorterDuffColorFilter(
      context.getResources().getColor(R.color.grid_state_focused), 
      PorterDuff.Mode.SRC_ATOP); 
    imageView.setColorFilter(blueFilter); 
    imageView.setBackgroundColor(context.getResources().getColor(
      R.color.grid_state_pressed)); 
} 
+0

इन दो कथनों से आपका क्या मतलब है: "आइटम के छविदृश्य स्रोत खो गए हैं" और "जब मैं इसे छोड़ देता हूं तो स्रोत होंगे निश्चित " –

+0

विचार छविदृश्य हैं। जब मैं किसी अन्य छविदृश्य पर एक छविदृश्य खींचता हूं, तो वे छविदृश्य वहां चित्र दिखाना बंद कर देंगे (छवि जिसे मैंने छविदृश्य के स्रोत के रूप में सेट किया है)। जैसे ही मैं छविदृश्य छोड़ दूंगा, ग्रिडव्यू एडाप्टर पर सूचित करेंडेटाट चेंज() को कॉल किया जाएगा और सभी चित्र दोबारा दिखाए जाएंगे। उसके बाद सब कुछ सामान्य काम करता है और चित्र गायब नहीं होते हैं। मेरी खराब इंग्लिश के लिए माफ़ कीजिये। – Luciano

+0

आप 'setBlueFilterOnImageView' में क्या कर रहे हैं? – Luksprog

उत्तर

0

I finnaly के आसपास एक काम मिला। तो समस्या यह है कि जब मैं DragEvent.ACTION_DRAG_ENTERED में रंग फ़िल्टर सेट करता हूं, तो छवि दृश्य स्रोत समाप्त हो जाएगा। इससे बचने के लिए, जब मैं रंग फ़िल्टर सेट करता हूं तो मैं स्रोत को रीसेट करता हूं। बहुत साफ समाधान नहीं है, लेकिन यह मेरे लिए काम करता है .. सभी मदद के लिए Thnx

1

मैं this पाया है आपकी क्वेरी के लिए releated यह तुम्हारी मदद करेगा हो सकता है:

यहाँ मेरी touchListener जो खींचें संभालने के लिए और छोड़ देंगे है। अपने लंबे कोड को समझना बहुत मुश्किल है इसलिए इस लिंक से प्रबंधन करने का प्रयास करें।

एक:

मुद्दा हो सकता है एक बार mGridView.setOnTouchListener(new OnTouchListener() ... तरह

0

मुझे लगता है कि अपने कोड में कई समस्याएं हैं करने की कोशिश mGridView.setOnTouchListener(new View.OnTouchListener() ... में है। आपकी ऑन टच विधि हमेशा झूठी वापसी करती है, जिसका आमतौर पर अर्थ है कि श्रोता ने अभी तक इस कार्यक्रम का उपभोग नहीं किया है। तो आपको

target.startDrag(data, new View.DragShadowBuilder(target), target, 0); 

बी के बाद सत्य वापस आना चाहिए। आपने ऑन-टच इवेंट की हैंडलिंग विधि में ऑनड्रालिस्टर पंजीकरण रखा है, जो मुझे लगता है कि इस समस्या का मुख्य कारण हो सकता है। जब आप एक ड्रैग किए गए आइटम को छोड़ते हैं, तो ऑनड्रालिस्टर पंजीकृत नहीं हो सकता है। चूंकि आपका श्रोता पंजीकरण स्रोत दृश्य पर निर्भर नहीं करता है, इसलिए आप सीधे ड्रैगलिस्टर पर पंजीकरण कर सकते हैं। और कोड को इस तरह दिखें:

mGridView.setOnTouchListener(new View.OnTouchListener() { 

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

}; 

for(View view : ...){ 
    view.setOnDragListener(new View.OnDragListener() { 
     //put your implementation here 
    } 
} 
+0

THNx .. मुझे अपना कोड अब ऊपर जैसा दिख रहा है, लेकिन फिर भी वही व्यवहार .. – Luciano

संबंधित मुद्दे