2010-04-08 24 views
6

मैं कुछ है कि कस्टम खींचें और ड्रॉप कार्यक्षमता की जरूरत पर काम कर रहा हूँ में ड्राइंग, तो मैं देखें उपवर्गीकरण किया गया है, जवाब में गणित का एक समूह कर घटनाओं को छूने के लिए, और फिर सब कुछ मैन्युअल रूप से प्रतिपादन के माध्यम से ऑन ड्रा में कैनवास पर कोड। अब, जितनी अधिक कार्यक्षमता मैं जोड़ता हूं, उतना ही कोड नियंत्रण से बाहर हो रहा है और मुझे लगता है कि मैं एंड्रॉइड जैसे उच्च स्तरीय वातावरण में लिखने की अपेक्षा से एक टन अधिक कोड लिख रहा हूं।खींचें और छोड़ें + कस्टम एंड्रॉयड

इस कि यह कैसे हुआ, या मैं कुछ याद आ रही है है? अगर मैं यूआई में कुछ भी नहीं कर रहा हूं, तो ढांचा मेरे अधिकांश इंटरैक्शन को संभालता है। अंतर्निर्मित नियंत्रण स्पर्श और ड्रैग को संभालते हैं, और मेरा कोड व्यवसाय तर्क और डेटा तक काफी सीमित है। क्या यूआई नियंत्रणों और एनिमेशन जैसी चीजों की शक्ति का लाभ उठाने का कोई तरीका है जबकि इसे कुछ भी मैन्युअल रूप से ऑनड्रा कैनवास में कर रहा है? क्या एक या दूसरे का उपयोग करने का एक स्वीकार्य मानक है (यदि वास्तव में दो दृष्टिकोण मिश्रित किए जा सकते हैं)?

+0

मेरे खेल में मैं निश्चित रूप से कोड, गणित, चेक आदि जब एनीमेशन और कस्टम स्पर्श interfacing के लगभग किसी भी प्रकार से निपटने में टन लिखना पड़ा। शायद आसान तरीके हैं, लेकिन ऐसा करने के लिए यह असामान्य प्रतीत नहीं होता था। –

+0

शांत ... प्रतिक्रिया की सराहना करते हैं। मैं सोच रहा था कि मैं एक ViewGroup का उपयोग कर और अन्य मानक तत्वों के साथ अपने कस्टम तैयार विचारों के मिश्रण से फंकी संकर सामान कर सकते हैं, लेकिन मैं वास्तव में समय है कि सामान के साथ चारों ओर खेलने के लिए खर्च की तरह नहीं लग रहा है जब मैं पहले से ही गति का एक छोटा सा है लंबा रास्ता जा रहा है। – Rich

उत्तर

7

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

package com.liviu.app.smpp.gui; 

import android.content.Context; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

import com.liviu.app.smpp.R; 
import com.liviu.app.smpp.listeners.CollisionListener; 

public class SongItemView extends RelativeLayout implements OnClickListener { 
// data 
private String TAG = "SongItemView"; 
private Context context; 
private LayoutInflater lInflater; 
private String title; 
private int id; 
private int maxHeight = 410; 
private int mCurX; 
private int mCurY; 

//listeners 
private CollisionListener onCollisionListener = null; 

// views 
private View v; 

public SongItemView(Context ctx, String title_, int id_) { 
    super(ctx); 

    context = ctx; 
    lInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    v   = lInflater.inflate(R.layout.song_item_view, null); 
    title  = title_; 
    id  = id_; 

    ((TextView)v.findViewById(R.id.siv_title)).setText(title);  

    addView(v, new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
} 

@Override 
public void onClick(View v) { 
    Log.e(TAG, "clicked! " + ((TextView)v.findViewById(R.id.piv_title)).getText().toString()); 
} 

public View getView(){ 
    return v; 
} 

public String getPlsName() { 
    return title; 
} 

public int getID() { 
    return id; 
} 

public void setTitle(String title_){ 
    ((TextView)v.findViewById(R.id.siv_title)).setText(title_); 
    title = title_; 
} 

public void setID(int id_) { 
    id = id_; 
} 

@Override 
public boolean dispatchTouchEvent(MotionEvent event) { 
    mCurX = (int) event.getRawX(); 
    mCurY = (int) event.getRawY(); 

    int action = event.getAction();   

    if (action == MotionEvent.ACTION_MOVE) 
    {  
     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);      
     params.leftMargin = mCurX; 
     params.topMargin = mCurY; 
     this.setLayoutParams(params); 

     if(this.getTop() >= maxHeight) 
     { 
      Log.e(TAG, "Collision!!!!"); 
      if(onCollisionListener != null){ 
        onCollisionListener.onCollision(this);     
      } 
     }     
    } 

    return true; 
} 

public void setOnCollisionListener(CollisionListener listener){ 
    onCollisionListener = listener; 
} 

public void setMaxHeight(int height){ 
    maxHeight = height; 
} 

public int getmCurX() { 
    return mCurX; 
} 

public int getmCurY() { 
    return mCurY; 
} 

public int getMaxHeight() { 
    return maxHeight; 
} 

}

मुझे आशा है कि यह एक बिट में मदद मिलेगी।

धन्यवाद!

+0

मुझे यह विचार पसंद है। मैं अपने दृश्य के शीर्ष पर एक सापेक्ष लेटआउट बनाकर ड्रैग और ड्रॉप को लागू करने की कोशिश करने जा रहा हूं, और फिर लांग टच को रोक रहा हूं और आगे बढ़ सकता हूं। मुझे लगता है कि आप यहां भी क्या कर रहे हैं। प्रेरणा के लिए महान विचार! – Peterdk

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