2016-03-07 4 views
6

मैं के कुछ शब्दों को SpannableString का उपयोग करके OnDragListener सेट करने का प्रयास कर रहा हूं। इमस्पैन करने योग्य स्ट्रिंग पर ड्रैग श्रोता सेट करें

hashText.setSpan(new ClickableSpan() { 

करके ClickableSpan

का उपयोग करके किसी OnClick श्रोता जोड़ने में सक्षम तो मैं सोचा मैं एक ही कोशिश लेकिन OnDragListener साथ ClickableSpan की जगह लेंगे।

मैं विभिन्न ड्रैग घटनाओं को पढ़ने में सक्षम हूं, लेकिन मैं ड्रैग इवेंट को अलग-अलग शब्दों में अलग करने में सक्षम नहीं हूं, क्योंकि मैं ClickableSpan के साथ करने में सक्षम हूं।

hashText.setSpan(new View.OnDragListener() { 
      @Override 
      public boolean onDrag(View targetView, DragEvent event) { 
       int action = event.getAction(); 
       TextView targetVariable = (TextView) targetView; 
       String textGetter; 
       textGetter = targetVariable.getText().toString(); 
       // boolean actionDropOutside = (DragEvent.ACTION_DRAG_ENDED != DragEvent.ACTION_DROP); 
       switch (event.getAction()) { 
       case DragEvent.ACTION_DRAG_STARTED: 


        Log.d(TAG, "DRAG STARTED"); 
        break; 
       case DragEvent.ACTION_DRAG_ENTERED: 

        ////create method that checks if text is empty if so lights up 
        //if (textGetter.equals("")) { 
        targetView.setBackgroundColor(CARD_SLECTED); 
        //lightupVariableCard(cardV); 
        Log.d(TAG, "DRAG ENTERED EMPTY TEXT"); 
        //} 

        Log.d(TAG, "DRAG ENTERED" + targetVariable.getText().toString()); 
        break; 
       case DragEvent.ACTION_DRAG_EXITED: 
        targetView.setBackgroundColor(CARD_UNSLECTED); 
        Log.d(TAG, "DRAG EXITED"); 
        break; 

       case DragEvent.ACTION_DROP: 
        // Dropped, reassign View to ViewGroup 
        //if (textGetter.equals("")) { 
        TextView draggedView = (TextView) event.getLocalState(); 
        ViewGroup owner = (ViewGroup) draggedView.getParent(); 
        targetVariable.setText(draggedView.getText()); 
        owner.setVisibility(View.INVISIBLE); 
        targetView.setBackgroundColor(CARD_UNSLECTED); 
        //fabDisplayCounter++; 
        //displayFab(); 
        Log.d(TAG, "DRAG DROPPED"); 
        //} 
        Log.d(TAG, "DRAG NOT POSSSIBLE HERE"); 
        break; 
       case DragEvent.ACTION_DRAG_ENDED: 
//    if (actionDropOutside == true){ 
//     Log.d(TAG, "DRAG DROPPED OUTSIDE TRUE"); 
//    } 
        Log.d(TAG, "DRAG ENDED"); 
        //default: 

       } 
       return true; 
      } 


      }, matcher.start(), matcher.end(), i); 
      the_question.setText(hashText); 
      the_question.setMovementMethod(LinkMovementMethod.getInstance()); 
      //the_question.setOnDragListener(new MyDragListener(hashText.nextSpanTransition())); 

उत्तर

2

मैं इस क्षेत्र में एक बड़ा विशेषज्ञ नहीं हूं, इसे कभी खोदना नहीं था। लेकिन चूंकि आपके पास कोई जवाब नहीं है, इसलिए मैं आपको कुछ संकेत/दिशा देने की कोशिश करता हूं।

मुझे लगता है कि आपको क्या चाहिए एक कस्टम MovementMethod है।

एंड्रॉयड प्लेटफॉर्म MovementMethod इस पैकेज के अंदर यहां प्रबंधित कर रहे हैं: https://github.com/android/platform_frameworks_base/tree/master/core/java/android/text/method

विशेष रूप से इस इंटरफेस: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/text/method/MovementMethod.java

जैसा कि आप देख यह एक onTouchEvent() विधि है।

ClickableSpan एक onClick विधि है, लेकिन यह केवल काम करता है वहाँ एक LinkMovementMethod स्पर्श घटनाओं से निपटने, ClickableSpan की तलाश में हैं और उन पर onClick() जारी करने के कारण।

देखें: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/text/method/LinkMovementMethod.java

जो विस्तार: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/text/method/ScrollingMovementMethod.java

जो https://github.com/android/platform_frameworks_base/blob/master/core/java/android/text/method/BaseMovementMethod.java

का विस्तार, लेकिन यह पिछले वास्तव में स्पर्श के साथ संबंधित नहीं है। https://github.com/android/platform_frameworks_base/blob/master/core/java/android/text/method/Touch.java

कोड पर बहुत जल्दी खोज रहे हैं मुझे लगता है कि आप LinkMovementMethod का विस्तार करने और वहाँ खींचें का पता लगाने जोड़ सकते हैं:

ScrollingMovementMethod उपयोग वर्ग Touch स्पर्श घटना से निपटने को सौंपने के लिए, आप यहाँ इस वर्ग देख सकते हैं। फिर ड्रैग करने के लिए एक नया Span प्रकार बनाएं और इसके अंदर ड्रैगिंग विधियों को कॉल करें।

मुझे पता है कि मैंने आपको समाधान नहीं दिया है, लेकिन मुझे आशा है कि मैंने आपको सही दिशा में इंगित किया है।

+0

हे फीडबैक के लिए धन्यवाद। मैं एक उत्तर के रूप में चिह्नित नहीं कर रहा हूं क्योंकि मैं mods द्वारा चिल्लाया नहीं चाहता, लेकिन मैं आगे बढ़ गया और यह सुनिश्चित करने के लिए वोट दिया कि आप अपने प्रयास के लिए अंक प्राप्त करें। मैंने आपके सुझाव के साथ थोड़ा सा झुका दिया है, लेकिन इस दौरान मैं एक अलग दिशा में गया हूं। जैसे ही मेरे पास समय है, मैं आपके सुझाव पर फिर से विचार करूंगा और आपके उत्तर के आधार पर समाधान जोड़ूंगा। धन्यवाद फिर से – user1446988

+0

@ user1446988 कोई समस्या दोस्त नहीं है, आपके द्वारा प्राप्त समाधान के साथ अपने स्वयं के प्रश्न का उत्तर देने पर विचार करें, यह दूसरों या यहां तक ​​कि आपके भविष्य के स्वयं की सहायता कर सकता है। यदि आप मेरे सुझाव का प्रयास करते हैं तो मुझे बताएं। –

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