2010-07-24 26 views
28

के वर्तमान वाई ऑफसेट को कैसे प्राप्त करें स्क्रॉल व्यू में एक्स और वाई स्क्रॉल ऑफ़सेट सेट करने का एक तरीका है, लेकिन वर्तमान ऑफसेट प्राप्त करने के लिए कोई विधि नहीं है (मुझे वास्तव में दिलचस्पी है वाई ऑफसेट है, क्योंकि स्क्रॉलव्यू केवल समर्थन करता है वर्टिकल स्क्रॉलिंग)। मुझे सुपरक्लास में काम करने वाली कोई भी विधि दिखाई नहीं दे रही है, और सामग्री दृश्य के लिए getTop() को आजमाया गया है, जो हमेशा शून्य होता है। क्या मैं कुछ भूल रहा हूँ?स्क्रॉलव्यू

उत्तर

1

इसके बारे में: computeHorizontalScrollOffset() और computeVerticalScrollOffset()

+4

उन विधियों को संरक्षित किया गया है और इस प्रकार केवल तभी सुलभ हो सकता है जब आप स्क्रॉलव्यू को उप-वर्गीकृत कर रहे हों। –

+0

धन्यवाद, क्रिस्टियन, आपके समाधान ने मेरी मदद की। मेरे पास स्क्रॉलव्यू से पहले से सबक्लास दृश्य है। इसकी गणना श्रोता सेटऑनस्क्रॉल व्यूइस्टनर (http://www.nicholasmelnick.com/entries/104) के साथ की जानी चाहिए। GetScrollY() के साथ भी पहला समाधान सही काम करता है। – CoolMind

46

स्क्रॉलव्यू पर getScrollY() पर कॉल करें। यहाँ अधिक जानकारी के लिए देखें: http://developer.android.com/reference/android/view/View.html#getScrollY%28%29

+1

मैं जानना चाहता था कि क्या मेरी स्क्रॉल व्यूइंग एक टेक्स्ट को लपेटती है समय-समय पर बढ़ती सामग्री (लॉग व्यू की तरह) के साथ पाठ की आखिरी पंक्ति दिखा रही थी। यह किया: 'बूलियन lastLineVisible = scrollView.getScrollY() + scrollView.getHeight() + 100> = textView.getHeight()' –

4

आप सुनिश्चित रूप से getScrollY() या getTop() उपयोग करने के बाद कुछ मूल्य मिलना चाहिए रहे हैं, अब यह काम करना चाहिए एक

yourScroolView.post(new Runnable() { 
@Override 
public void run() { 
    Toast.makeText(getApplicationContext(),"Current Y is : "+getScrollY,Toast.LENGTH_SHORT).show(); 
      } 
     }); 

अंदर उन विधि डाल करने के लिए प्रयास करें। इस विधि के बारे में मेरी समझ के अनुसार, यह केवल लेआउट तैयार होने के बाद ही चलाएगा। यह एक कारण हो सकता है कि आप पहले 0 क्यों प्राप्त करते रहे। आशा करता हूँ की ये काम करेगा।

0

मैं निम्नलिखित प्राप्त करने के लिए प्राप्त करता हूं। सबसे पहले स्क्रीन वजन और चौड़ाई प्राप्त करें।

DisplayMetrics metrics = getResources().getDisplayMetrics(); 
float screenWidth = metrics.widthPixels; 
float screenHeight = metrics.heightPixels; 
तो

दस्तावेज़ ऊंचाई पता लगाने के लिए (कुल, क्या दिखाया जा रहा है और क्या स्क्रीन से बाहर है)

public float getDocumentHeight(){ 
    return (computeVerticalScrollRange() * screenHeight)/computeVerticalScrollExtent(); 
} 

अंत में ऑफसेट

public float getTopY(){ 
    return (getDocumentHeight() * computeVerticalScrollOffset())/computeVerticalScrollRange(); 
} 

यह प्राप्त करने के लिए आपको जो दस्तावेज़ दिखाई दे रहा है उसके हिस्से से संबंधित विंडो का शीर्ष आपको दें ताकि आप

द्वारा किसी ईवेंट की सटीक स्थिति पा सकें
public boolean onTouchEvent(MotionEvent event) { 
     int y = event.getY() + (int) getTopY(); 
    } 

तुम भी चौड़ाई

2

आप कुछ इस तरह क्यों कोशिश मत करो संभालने के लिए कुछ इसी तरह कर सकते हैं?

targetScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { 
     @Override 
     public void onScrollChanged() { 
      int scrollX = targetScrollView.getScrollX(); 
      Log.d(TAG, "scrollX: " + scrollX); 
     } 
    }); 
संबंधित मुद्दे