एंड्रॉइड ड्रैग और ड्रॉप। खींचने के बाद पोजिशनिंग छवि

जब मैं ImageView खींचता हूं तो उसे उस जगह पर नहीं रखा जाता है जहां मैंने उंगली को छोड़ दिया था। यह सिर्फ नीचे और दाईं ओर रखा गया है। मुझे समझ में नहीं आता कि क्या गलत है।

ImageView पोजीशनिंग परिणाम के लिए विभिन्न विकल्पों का प्रयास किया वही है

ख़ाका

<कोड>

    


कोड

<कोड>@Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.ख़ाका.activity_main);
            findViewById(R.id.imageView1).setOnTouchListener(this);
            findViewById(R.id.imageView1).getRootView().setOnDragListener(this);
        }

public boolean onTouch(View view, MotionEvent motionEvent) {
    if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
        DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
        view.startDrag(null, shadowBuilder, view, 0);
        view.setVisibility(View.INVISIBLE);
        return true;
    } else {
        return false;
    }
}

public boolean onDrag(View v, DragEvent event) {

    switch (event.getAction()) {
        case DragEvent.ACTION_DROP:

        float X = event.getX();
        float Y = event.getY();

        Log.d(LogCat, "X " + (int) X + "Y " + (int) Y);
        View view = (View) event.getLocalState();
        view.setX(X);
        view.setY(Y);
        view.setVisibility(View.VISIBLE);

    default:
        break;
    }
    return true;
} 

LogCat

<कोड>12-04 23:44:40.548: D/myLogs(32658): Width image 72 Height image 72
12-04 23:44:40.558: D/myLogs(32658): ACTION_DROP X 216Y 390
12-04 23:44:40.568: D/myLogs(32658): Real position: X 180.0Y 354.0
12-04 23:44:40.598: D/myLogs(32658): Drag ended
12-04 23:44:41.928: D/myLogs(32658): Width image 72 Height image 72
12-04 23:44:41.928: D/myLogs(32658): ACTION_DROP X 442Y 329
12-04 23:44:41.948: D/myLogs(32658): Real position: X 406.0Y 293.0
12-04 23:44:41.968: D/myLogs(32658): Drag ended
4

4 उत्तर

बदलने के

view.setX(X);
view.setY(Y);

साथ में

view.setX(X-(view.getWidth()/2));
view.setY(Y-(view.getHeight()/2));
7
जोड़ा
मैंने यह किया। इससे पहले ImageView नीचे और दाईं ओर डाला गया है, अब बस नीचे।
जोड़ा लेखक KillAndEat, स्रोत
जोड़ा लॉग! 72 * 72 स्टैंडएट एंड्रॉइड आइकन देखें
जोड़ा लेखक KillAndEat, स्रोत
अगर मैं केवल छवि को छूता हूं, और कुछ नहीं। जब मैं उंगली जाने देता हूं तो छवि नीचे जाती है।
जोड़ा लेखक KillAndEat, स्रोत
क्या यह सभी पदों के लिए होता है? आपकी दृश्य चौड़ाई, ऊंचाई और एक्स, वाई क्या है
जोड़ा लेखक Subbu, स्रोत
कोड के अनुसार, यह ठीक से काम कर रहा है। आपकी समस्या क्या है? आप कैसे कह सकते हैं "बस नीचे" - आपकी ड्रॉप वाई स्थिति 390 है और आपकी दृश्य वाई स्थिति 354 है। क्या आप कह रहे हैं कि 3 9 0 और 354 समान हैं?
जोड़ा लेखक Subbu, स्रोत
यदि आप परिवर्तनों को और स्पष्ट देखना चाहते हैं, तो इस कोड को बड़े आकार के छवि आइकन के साथ आज़माएं। अब आप अंतर देख सकते हैं।
जोड़ा लेखक Subbu, स्रोत

ऐसा इसलिए है क्योंकि यह छवि के शीर्ष बाएं कोने को जहां आप पुनः प्राप्त करते हैं वहां रख रहा है।

यह वही करने के लिए जो आप चाहते हैं, मूल रूप से आपको छवि की चौड़ाई के आधे हिस्से को X से आधे से इसकी ऊंचाई तक घटा देना होगा।

तो आपके पास ऐसा कुछ होना चाहिए:

view.setX((X - (image.width/2));
view.setY(Y - (image.width/2));
3
जोड़ा
स्पष्टीकरण के लिए धन्यवाद
जोड़ा लेखक KillAndEat, स्रोत

v.setX (me.getRawX() - (v.getWidth ()/2));

v.setY (me.getRawY() - (फ्लोट) (v.getHeight() * 1.5/2));

मैंने इस समाधान को सही उत्तर के रूप में पाया जहां वस्तु के केंद्र से खींचते हुए।

0
जोड़ा

बस किसी को इसके साथ मदद की ज़रूरत है: मैंने कोशिश की और पाया कि समस्या रूटव्यू के साथ है, अगर आप अपना लेआउट एक आईडी देते हैं (जिसे आप छवि में ले जा रहे हैं) और रिलेस से

findViewById(R.id.imageView1).getRootView().setOnDragListener(this);    
findViewById(R.id.imageView1).getRootView().findViewById(R.id.yourLayout).setOnDragListener(this);     

ऐसा करना चाहिए।
छवि को रखने के लिए बीच में देखें अन्य लोगों ने पहले से ही क्या कहा है:

view.setX(X - iv.getWidth()/2);
view.setY(Y - iv.getHeight()/2) ;

यह बीच में छवि दृश्य रखेगा हैप्पी प्रोग्रामिंग :)

0
जोड़ा