2010-12-14 14 views
7

एंड्रॉइड होमस्क्रीन पर उन्हें बिन में खींचकर आइटम को हटाना संभव है।अपने स्वयं के आवेदन में, बिन में बेंच के होमस्क्रीन व्यवहार को कैसे प्राप्त करें?

मैं अपने स्वयं के एप्लिकेशन में समान कार्यक्षमता रखना चाहता हूं, जहां मेरे पास कस्टम व्यू आइटम्स के साथ एक दृश्य है जिसे मैं उपयोगकर्ता ड्रैग-एंड-ड्रॉपपेबल बनना चाहता हूं।

क्या इस कार्यक्षमता को लागू करने का कोई आसान तरीका है? या क्या कोई मुझे पॉइंटर्स दे सकता है जो मुझे इसे प्राप्त करने के संभावित तरीके से मार्गदर्शन कर सकता है?

+0

मिठाई पर एक नजर है छड़ी तो पता चला है कि बहुत कैसे करना है .. मुझे कुछ शोध करने दो अगर मुझे कुछ मिल जाए तो मैं वापस आऊंगा। – Shardul

+0

अच्छा! मेरे पास अब अवधारणा का एक कामकाजी सबूत है। आपके कार्यान्वयन में दिलचस्पी है। – Peterdk

+1

एंड्रॉइड में लॉन्चर एप्लिकेशन जिसका आप जिक्र कर रहे हैं वह ओपन सोर्स है। मुझे लगता है कि आप स्रोत कोड को देखकर उनके कार्यान्वयन से सीख सकते हैं। http://android.git.kernel.org/?p=platform/packages/apps/Launcher.git;a=summary –

उत्तर

1

मुझे लगता है कि आपके पास एप्लिकेशन की तरह होमस्क्रीन है, कम से कम उन वस्तुओं के साथ एक दृश्य जिसे आप खींचना और छोड़ना चाहते हैं।

ऑस्टिन महनी की तरह उनकी टिप्पणी में कहा गया है कि आप एंड्रॉइड ओपन सोर्स होमस्क्रीन कोड पर जा सकते हैं। लेकिन चूंकि ड्रैग और ड्रॉप एक आसान कार्यान्वयन सुविधा है, इसलिए आप इसे अपने आप भी संभाल सकते हैं।

आपको अपने आइटमों को संग्रहीत करने की आवश्यकता है उदा। एक सरणी। फिर घटना प्रकारों के माध्यम से जाओ।

प्रत्येक ACTION_DOWN पर आपको यह जांचने की आवश्यकता है कि उपयोगकर्ता द्वारा कोई आइटम मारा गया था या नहीं। जैसे यदि हमारे पास मंडलियों के रूप में मंडल हैं, तो हमें वर्तमान ACTION_DOWN निर्देशांक को कैप्चर करने की आवश्यकता है ताकि हम उन्हें आइटम के भीतर रहने के लिए जांच सकें और उस आइटम की आईडी प्राप्त कर सकें जिसे उपयोगकर्ता ACTION_DOWN निर्देशांक के अनुसार खींचने वाला है।

ACTION_MOVE पर आपको नई स्थिति पर इसे फिर से निकालने के लिए आइटम को वर्तमान एक्स और वाई निर्देशांक पास करने की आवश्यकता है।

वैसे यह सिर्फ ड्रैग और ड्रॉप सुविधा है। अब आपको आइटम को उस विशिष्ट क्षेत्र में जांचने की आवश्यकता है जिसे आप बिन कहते हैं। तो आप अपनी स्क्रीन पर एक आयताकार परिभाषित करते हैं। ACTION_MOVE में आइटम को इस क्षेत्र के भीतर होने का परीक्षण करें, यह सब कुछ है।

खींचें और ड्रॉप के लिए बस कुछ उदाहरण कोड:

public boolean onTouchEvent(MotionEvent event){ 
    int itemID = 0; 
    int X = (int)event.getX(); 
    int Y = (int)event.getY(); 

     switch(event.getAction()){ 
      case MotionEvent.ACTION_DOWN: 
       for(Items item : dragable_item){ 

        //center coords of the item 
        int centerX = item.getX() + 25; 
        int centerY = item.getY() + 25; 

        //calculate the distance (radius) from touch to item 

        //get item to drag 
        if(distance < 20){ 
         itemId = item.getID(); break; 
        } 
       } 
      break; 
      case MotionEvent.ACTION_MOVE: 
       if(itemID > 0){ 
        Items[itemID-1].setX(X-25); 
        Items[itemID-1].setY(X-25); 
       } 
      break; 
     } 
    } 
    invalidate(); return true; 
} 

आप कोड में और अधिक खुदाई .. मैं चाहेंगे anddev.org - drag and drop.

+0

बहुत ही जानकारीपूर्ण उत्तर। – Peterdk

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