8

मेरे पास विस्तारणीय बाल दृश्यों के साथ एक पुनर्चक्रण दृश्य है, जब बच्चे व्यू ग्रुप पर क्लिक किया जाता है तो यह व्यूग्रुप ऊंचाई को 0 से मापा गया दृश्य समूह ऊंचाई तक एनिमेट करने वाले दृश्यों को बढ़ाता है, जैसे कि निम्नलिखित gif :एंड्रॉइड रीसाइक्लर अपनी ऊंचाई को एनिमेट करने के लिए चिकनी स्क्रॉल देखें

example

समस्या है: मैं recyclerView पर smoothScrollToPosition फोन कर रहा हूँ, यह देखने की स्थिति में चिकनी स्क्रॉल, लेकिन यह वर्तमान दृश्य ऊंचाई, है जो अभी भी विस्तार नहीं समझता है, ऊपर gif i 'में मैं recyclerview के नीचे देखने पर छू रहा हूं, जो स्थिति को स्क्रॉल नहीं करता है क्योंकि दृश्य पहले से दिखाई दे रहा है, लेकिन जब मैं फिर से स्पर्श करता हूं (चिकनी कॉलिंग scrolltoposition दोबारा) यह दृश्य को सही स्थिति में स्क्रॉल करें, क्योंकि दृश्य पहले से ही विस्तारित है।

क्या स्क्रीन के शीर्ष पर दृश्य स्क्रॉल करने के लिए कोई दृष्टिकोण है या सामग्री को दृश्यमान करने के लिए बस स्क्रॉल करें?

संदर्भ के लिए: इस विधि विचारों को बढ़ाने के लिए कहा जाता है:

collapsible_content.removeAllViews(); 
for(int i = 0; i < 5; i++) { 
     View link_view = getLayoutInflater().inflate(R.layout.list_item_timeline_step_link, collapsible_content, false); 
     TextView text = (TextView) link_view.findViewById(R.id.step_link_text); 
     text.setText("Test"); 
     collapsible_content.addView(link_view); 
    } 

और यह विस्तार करने के लिए मेरी विधि है:

public void toggle() { 
     collapsible_content.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
     Animation a; 
     if (mExpanded) { 
      a = new ExpandAnimation(collapsible_content.getLayoutParams().height, 0); 
     } else { 
      a = new ExpandAnimation(collapsible_content.getLayoutParams().height, getMeasuredHeight()); 
     } 
     a.setDuration(mAnimationDuration); 
     collapsible_content.startAnimation(a); 
     mExpanded = !mExpanded; 
    } 

और एनीमेशन:

private class ExpandAnimation extends Animation { 
     private final int mStartHeight; 
     private final int mDeltaHeight; 

     public ExpandAnimation(int startHeight, int endHeight) { 
      mStartHeight = startHeight; 
      mDeltaHeight = endHeight - startHeight; 
     } 

     @Override 
     protected void applyTransformation(float interpolatedTime, 
              Transformation t) { 
      final int newHeight = (int) (mStartHeight + mDeltaHeight * 
        interpolatedTime); 
      collapsible_content getLayoutParams().height = newHeight; 

      if (newHeight <= 0) { 
       collapsible_content setVisibility(View.GONE); 
      } else { 
       collapsible_content setVisibility(View.VISIBLE); 
      } 
      collapsible_content requestLayout(); 
     } 


     @Override 
     public boolean willChangeBounds() { 
      return true; 
     } 
    } 

उत्तर

7

मेरे समाधान applyTransformation विधि के भीतर दृश्य नीचे के लिए निरंतर जांच करने के लिए गया था, और RecyclerView ऊंचाई के साथ तुलना, अगर नीचे आर.वी. ऊंचाई की तुलना में अधिक मिलता है, मैं diff मूल्यों से स्क्रॉल:

final int bottom = collapsible_content.getBottom(); 
final int listViewHeight = mRecyclerView.getHeight(); 
if (bottom > listViewHeight) { 
    final int top = collapsible_content.getTop(); 
    if (top > 0) { 
     mRecyclerView.smoothScrollBy(0, Math.min(bottom - listViewHeight + mRecyclerView.getPaddingBottom(), top)); 
    } 
} 

चाल दृश्य शीर्ष प्राप्त करने के लिए Math.min का उपयोग करना था, इसलिए यह ऊपर दिखाई देने के लिए स्क्रॉल नहीं करता है। ListViewAnimations

0

एनीमेशनलिस्टर जोड़ें और विस्तारित एनीमा के बाद रीसाइक्लिंगव्यू की स्क्रॉलिंग शुरू करें टयन खत्म हो गया है।

+0

मैं इस किया था के आधार पर

समाधान, लेकिन मैं थोड़ी देर के दृश्य एनिमेट है स्क्रॉल करने के लिए चाहते हैं, मेरे दृष्टिकोण अगर नीचे देखने के वाई RecyclerView से बाहर है की जाँच करने के एक एनीमेशन श्रोता जोड़ने के लिए था, तो पिक्सेल के मूल्य को देखते हुए चिकनी स्क्रॉल को कॉल करें, लेकिन मैंने यह प्रबंधित नहीं किया कि यह –

+0

ठीक है, इसलिए आप बिथ एनीमेशन समानांतर – Mann

+0

चाहते हैं, मुझे लगता है कि आपको उच्च दृश्य का नाटक करने के लिए दृश्य की ऊंचाई "नकली" करना है – Mann

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