9

में दृश्य देखने का निर्धारण करें, मैं my custom LayoutManager में अनुमानित एनिमेशन का समर्थन करना चाहता हूं जब आइटम दृश्यमान स्क्रीन सीमाओं से दृश्यमान बिंदु से बाहर स्थानांतरित हो जाता है।लेआउटमैनेजर प्री-लेआउट

सभी भरने के संचालन मैं onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) में करता हूं।

एक प्रलेखन पूर्व लेआउट चरण में भविष्य कहनेवाला एनिमेशन का समर्थन करने के (state.isPreLayout()) मैं परिवर्तन एनीमेशन के लिए प्रारंभिक स्थितियों सेट करना चाहिए (उदाहरण के लिए जगह कहीं दिखाई दे रहा विचारों) के अनुसार

समस्या यह है कि मैं नहीं कर सकता है प्री-लेआउट में निर्धारित करने का एक तरीका ढूंढें, जो दृश्यों को बाहर से स्थानांतरित किया जा रहा है, क्योंकि मैं केवल रीसाइक्लर व्यू दृश्यों से जुड़े वर्तमान के साथ काम करने में सक्षम हूं और विधि प्री-लेआउट चरण के बाद कहा जाता है। (उदाहरण के लिए onItemsRemoved से पहले पूर्व लेआउट कहा जाता है)

यह LayoutManager साथ बग है या मैं किसी भी तरह पूर्व लेआउट जो विचारों जल्दी ही ले जाए जा रहे हैं में निर्धारित कर सकते हैं?

पीएस: मैं दृश्य बिंदु से बाहर की भविष्यवाणी एनीमेशन को बनाए रखने में सक्षम हूं, क्योंकि मैं दृश्य दृश्यों के माध्यम से लूप करने में सक्षम हूं और recycler.convertPreLayoutPositionToPostLayout के साथ निर्धारित करता हूं कि कौन से स्थानांतरित किए जा रहे हैं।

//childViews is an iterable over RecyclerView items 
for (View view : childViews) { 
    RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) view.getLayoutParams(); 

    boolean probablyMovedFromScreen = false; 

    if (!lp.isItemRemoved()) { 
     //view won't be removed, but maybe it is moved offscreen 
     int pos = lp.getViewLayoutPosition(); 

     //start view is a first visible view on screen 
     int lowestPosition = getPosition(startView); 
     int highestPosition = getPosition(endView); 

     pos = recycler.convertPreLayoutPositionToPostLayout(pos); 
     probablyMovedFromScreen = pos < lowestPosition || pos > highestPosition; 
    } 

    if (probablyMovedFromScreen) { 
     //okay this view is going to be moved 
    } 

} 

This article मुझे एक बहुत मदद की है, लेकिन यह भी एक एनीमेशन जो मैं की जरूरत है वर्णन नहीं है।

पीपीएस: LinearLayoutManager भी ऐसी एनीमेशन का समर्थन नहीं करता है। (केवल साधारण फीड-इन एनीमेशन है)

+0

फिर भी समाधान की तलाश में ... – Beloo

+0

ग्रेट सवाल। मैं यहाँ भी अटक गया हूँ। अगर आपको कोई समाधान मिलेगा तो कृपया साझा करें। –

उत्तर

3

आप नहीं जानते कि कौन से आइटम दिखाई देंगे लेकिन आप जानते हैं कि कौन से आइटम चले जाएंगे (या बदले गए) ताकि आप अनुमान लगा सकें कि कितना स्थान आवश्यक है किस दिशा में। आप यह देखने के लिए LinearLayoutManager के कोड की जांच कर सकते हैं कि यह कैसे काम करता है। आप इन लेखों को रीसाइक्लर व्यू सिस्टम के विवरण के बारे में भी पढ़ सकते हैं।

http://www.birbit.com/recyclerview-animations-part-1-how-animations-work http://www.birbit.com/recyclerview-animations-part-2-behind-the-scenes

+0

लेकिन आंदोलन के बारे में क्या सवाल है, सवाल इसके बारे में है। उदाहरण के लिए स्क्रीन पर 100 से 120 के दृश्य प्रदर्शित होते हैं और 0 दृश्य 110 स्थिति में स्थानांतरित होने जा रहा है। तो पूर्वानुमानित एनीमेशन खेलने के लिए मुझे कहीं और 0 स्थान दिखाना चाहिए, लेकिन मुझे वास्तव में पता नहीं है कि यह बिल्कुल 0 दृश्य है, क्योंकि 'onItemsMoved' अभी भी प्री-लेआउट में नहीं बुलाया गया है। इस तरह के दृश्य के बिना सरल फीड-इन एनीमेशन के साथ प्रदर्शित किया जाएगा और 'LinearLayoutManager' भी उस समस्या को हल नहीं करता है क्योंकि मुझे – Beloo

+0

दिखाई देता है, मैंने आपको इसे जलाने के लिए बाउंटी नहीं दिया है, लेकिन उत्तर अभी भी खोला गया है। जो भी हो, कोशिश करने के लिए ty – Beloo

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

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