android - Getting coordinate of view with relative to parent ScrollView -


पहले, मेरे पास निम्न ScrollView और लेआउट है। इसका चयनित दृश्य दृश्यमान कोड काम करने तक स्क्रॉल करें।

  & lt; ScrollView & gt; & LT; LinearLayout & gt; & Lt; जानकारी देखें 1 / & gt; & Lt; जानकारी देखें 2 / & gt; & Lt; जानकारी देखें 3 / & gt; & Lt; / LinearLayout & gt; & Lt; / scrollview & gt; निजी शून्य initScrollView () {यदि (this.selectedInfoView == नल) {// स्क्रॉल करने के लिए कुछ भी नहीं वापसी; } ScrollView scrollView = (ScrollView) this.getView ()। FindViewById (R.id.scrollView); Rect rect = new rect (); रीक्ल स्क्रॉलव्यूरेक्ट = नया रीक्ट (); selectedInfoView.getHitRect (रेक्ट); scrollView.getDrawingRect (scrollViewRect); Int dy = rect.bottom - scrollViewRect.bottom; यदि (डीएटी> 0) {scrollView.scrollBy (0, dy); }}   

नोट, getHitRect एक स्तर के माता-पिता के लिए समन्वय का सम्मान वापस करेगा। इसलिए, उपरोक्त कोड काम करेगा।

हालांकि, जब थोड़ा जटिल मामला आता है। उपरोक्त कोड अब काम नहीं करता है।

  & lt; ScrollView & gt; & Lt; LinearLayout 0 & gt; & LT; TextView / & gt; & Lt; LinearLayout 1 & gt; & Lt; जानकारी देखें 1 / & gt; & Lt; जानकारी देखें 2 / & gt; & Lt; जानकारी देखें 3 / & gt; & Lt; / LinearLayout & gt; & LT; TextView / & gt; & Lt; LinearLayout 2 & gt; & Lt; जानकारी देखें 4 / & gt; & Lt; जानकारी देखें 5 / & gt; & Lt; जानकारी देखें 6 / & gt; & Lt; / LinearLayout & gt; & Lt; / LinearLayout & gt; & Lt; / scrollview & gt;   

मेरे कोड में, अगर मुझे जानकारी देखें 1-3 मिलता है, तो मुझे LinearLayout 0 और में ध्यान देने की आवश्यकता है I < LinearLayout 1 's getHitRect जानकारी देखें 4 - 6 के लिए कब आता है, मुझे LinearLayout 0 और LinearLayout 2 's getHitRect

चीजें बोझिल लग रही हैं सबसे अधिक ScrollView

यह वर्तमान में उपयोगी कोड है बोझिल है लेकिन यह इस समय काम करता है मेरे पास कुछ अवलोकन हैं।

  निजी शून्य इनिटसक्रॉलव्यू () (यदि (this.selectedInfoView == नल) {// स्क्रॉल करने के लिए कुछ भी नहीं है वापसी; } ScrollView scrollView = (ScrollView) this.getView ()। FindViewById (R.id.scrollView); रैखिकरेखा लाइनरलेआउट = नल; यदि (Info.In के इस .selectedInfo उदाहरण) {linearLayout = (LinearLayout) this.getView ()। FindViewById (R.id.linearLayout0); } और (ज़ोर देना) (Info.Info का यह। LinearLayout = (LinearLayout) this.getView ()। FindViewById (R.id.linearLayout1); } Rect rect = new rect (); रीट लाइनर लेटआउटरेक्ट = नया रीक्ट (); रीक्ल स्क्रॉलव्यूरेक्ट = नया रीक्ट (); selectedInfoView.getHitRect (रेक्ट); linearLayout.getHitRect (linearLayoutRect); scrollView.getDrawingRect (scrollViewRect); // रेखीय लेआउट के सापेक्ष समन्वय प्राप्त करें। नोट नीचे देखें Int correct_expected_bottom_y = linearLayoutRect.top + rect.bottom; Int dy = correct_expected_bottom_y - scrollViewRect.bottom; यदि (डीएटी> 0) {scrollView.scrollBy (0, dy); }}   

मैंने भी getLocationInWindow , getLocationOnScreen और getLocalVisibleRect के साथ परीक्षण किया है। उनमें से कोई भी सबूत बेवकूफ़ नहीं है।

(x, y - width, height)

  ------------------ - | | (?, 120) & lt; - सही नीचे की उम्मीद है | | (0, 146) & lt; - getLocationInWindow / getLocationOnScreen पर | | (0, 0 - 360, 72) & lt; - getLocalVisibleRect से -------------------- | | (?, 1 9 3) & lt; - सही नीचे की उम्मीद | | (0, 21 9) & lt; - getLocationInWindow / getLocationOnScreen पर | | (0, 0 - 360, 72) & lt; - getLocalVisibleRect से -------------------- | | (?, 266) & lt; - सही नीचे की उम्मीद | | (0, 2 9 2) & lt; - getLocationInWindow / getLocationOnScreen से | | (0, 0 - 360, 72) & lt; - getLocalVisibleRect से -------------------- | | (?, 33 9) & lt; - सही नीचे की उम्मीद | | (0, 365) & lt; - getLocationInWindow / getLocationOnScreen से | | (0, 0 - 360, 72) & lt; - getLocalVisibleRect से -------------------- | | (?, 485) & lt; - सही नीचे की उम्मीद है | [दृश्य नहीं] | (0, 511) & lt; - getLocationInWindow / getLocationOnScreen पर | | (0, 413 - 360, 485) & lt; - getLocalVisibleRect से --------------------   

getLocationInWindow

यह हमेशा उम्मीद मूल्य से 26 अधिक पिक्सल है। उदाहरण के लिए, पहली पंक्ति ले, 26 = 146 - 120 । मुझे लगता है कि ActionBar , या StatusBar ऊंचाई द्वारा योगदान दिया जा सकता है।

getLocationOnScreen

getLocationInWindow < / कोड>

getLocalVisibleRect

यह केवल अपेक्षित मान के रूप में समान मूल्य प्राप्त करता है, जब पंक्ति पूरी तरह से स्क्रीन पर दिखाई नहीं दे रही है। यकीन नहीं है कि क्यों। आखिरी पंक्ति को देखो, जहां यह वांछित नीचे की वैल्यू (485) होने का अनुमान लगाया गया है।

Comments

Popular posts from this blog

excel vba - How to delete Solver(SOLVER.XLAM) code -

github - Teamcity & Git - PR merge builds - anyway to get HEAD commit hash? -

ios - Replace text in UITextView run slowly -