2013-05-28 8 views
6

मैं गतिशील रूप से बनाने और फिर एक एंड्रॉइड गतिविधि में एक छवि को स्थानांतरित करने की कोशिश कर रहा हूं। हालांकि, setX() और setY() विधियां सही ढंग से काम नहीं कर रही हैं। जब यह पहली बार बनाया और रखा जाता है तो यह सही ढंग से किसी छवि की स्थिति को सेट करता है, लेकिन इसे अपडेट करने का कोई भी प्रयास गलत स्थान पर रखी गई छवि में परिणाम देता है। उदाहरण के लिए, छवि निम्नलिखित कोड पर ले जाता है:एंड्रॉइड सेटएक्स() और सेटवाई() अजीब व्यवहार करना

ImageView image; 
RelativeLayout layout = (RelativeLayout)findViewById(R.id.activity_this); 

if(action == MotionEvent.ACTION_DOWN){ 

    image = new ImageView(MyClass.this);        
    layout.addView(image, width, height); 
    image.setX(206); 
    image.setY(206); 
} 
else if(action == MotionEvent.ACTION_MOVE){ 

    if(image != null){ 
     image.setX(206); 
     image.setY(206); 
    } 
} 

ACTION_MOVE पर छवि ले जाया जाता है, भले ही x और y स्थिति मान ही रहते हैं। छवि का अभिभावक वही रहता है। आकार वही रहता है। अगर मुझे एक्स और वाई मान मिलते हैं तो यह अभी भी 206 कहेंगे, लेकिन यह अब गतिविधि पर (206, 206) पर नहीं रखा गया है। मैं खो रहा हूं कि यह क्यों हो रहा है। मुझे कोई संकेत नहीं मिल रहा है कि भौतिक रूप से बदलते स्थान को छोड़कर छवि को बदल दिया गया है।

उत्तर

13

वास्तव में, यह नहीं होना चाहिए। वैकल्पिक रूप से, एक और चर सेट करने और इसे x और y को सेट करने का प्रयास करें, या x प्राप्त करें और y प्राप्त करें और उनमें से प्रत्येक को एक ही स्थान के लिए 0 जोड़ें।

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); //WRAP_CONTENT param can be FILL_PARENT 
params.leftMargin = 206; //XCOORD 
params.topMargin = 206; //YCOORD 
childView.setLayoutParams(params); 

वहाँ अधिक जानकारी है -

के रूप में, Android - Use of view.setX() and setY in api 8 में कहा गया है अगर आप खोज की है, वहाँ एक और समाधान है कि भी भी एपीआई से पहले 8. LayoutParams इस तरह काम करता है काम करता है। मुझे आशा है कि इससे

+1

Tyvm में परिवर्तन का कारण बनता है। पैराम का उपयोग करना मेरे लिए काम करता है। मैं अभी भी उत्सुक हूं कि सेटएक्स और वाई के साथ क्या हो रहा है। मैंने सब कुछ करने की कोशिश की है, लेकिन जब भी मैं पहले से ही डाउन इवेंट में सेट हो चुका हूं, इससे कोई फर्क नहीं पड़ता है (इससे कोई फर्क नहीं पड़ता कि मैं नया मान कैसे सेट करता हूं) छवि गलत स्थान पर ले जाया गया है। यह निरंतर मूल्य के करीब 30 पिक्सल तक बहुत दूर है और एमुलेटर पर बाईं ओर मैं परीक्षण कर रहा हूं। मैंने सोचा कि इसे दृश्य के माता-पिता या कुछ बदलना था, लेकिन ऐसा नहीं है। सचमुच कुछ अलग नहीं है जो मैं पा सकता हूं। – user2423199

+0

क्या यह घनत्व हो सकता है? प्रोग्राम संख्यात्मक रूप से सेट करते समय, आपको getResources() से गुणा करना चाहिए। GetDisplayMetrics()। Dx मानों को px मानों को बदलने के लिए घनत्व – marmor

1

एक ही समस्या में भाग लें। View.setLeft(int)/View.setTop(int) मेरे लिए काम किया

+0

मेरे लिए काम नहीं किया। बस मेरे दृश्य को लंबवत – tieorange

+1

@ टियोरेंज वोट वोट दिया? मेरा मानना ​​है कि आपको हर उत्तर के लिए ऐसा करना चाहिए जो आपके लिए काम नहीं करता है। लेकिन आम तौर पर अधिक अलग-अलग उत्तर होते हैं, तो अधिक संभावना है कि आप दूसरों की मदद से समस्या को हल करने में अपना समय बचाएंगे क्योंकि इसी तरह की समस्या में वास्तव में अलग-अलग समाधान हो सकते हैं और कोई आपके लिए काम कर सकता है। या नहीं हो सकता है। बस इस मामले में खुदाई रखें। तो मैं वास्तव में वोट जवाब को कम करने का कोई व्यावहारिक कारण नहीं देख सकता अगर यह आपके विशेष मामले के लिए काम नहीं करता है क्योंकि यह अभी भी दूसरों के लिए सहायक हो सकता है। वोटिंग के द्वारा विभिन्न समाधानों को साझा करने के लिए प्रोत्साहित करें जो आपके लिए काम करता है और उपाध्यक्ष नहीं –

0

क्या आपकी गतिविधि पूर्ण स्क्रीन मोड में है? अगर इसे पूर्ण स्क्रीन पर बनाने का कोई प्रयास नहीं है और इसे आपकी समस्या का समाधान करना चाहिए।

0

उत्तर देने में बहुत देर हो चुकी है, लेकिन अगर किसी और को एक ही समस्या का सामना करना पड़ रहा है। यह मेरे लिए यह तय यह लेआउट फ़ाइल में paddings था:

android:paddingBottom="16dp" 
android:paddingLeft="16dp" 
android:paddingRight="16dp" 
android:paddingTop="16dp" 
0

किसी के रूप में, जो वास्तव में इस समस्या का सामना करना पड़, मैं parentView में किसी भी गद्दी को हटाने के द्वारा इस समस्या को हल किया है। पैडिंग उत्तर के लिए लेआउट आकार

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