2010-07-24 14 views
28

ScrollView, x ve y kaydırma ofseti ayarlamak için bir yönteme sahiptir, ancak geçerli ofset elde etmek için herhangi bir yöntem yoktur (yalnızca benim gerçekten ilgilendiğim şey kaymadır, çünkü ScrollView yalnızca desteklediği için dikey kaydırma). Üst sınıflarda çalışacak herhangi bir yöntem görmüyorum ve içerik görünümü için her zaman sıfır olan getTop() yöntemini denedim. Bir şey mi eksik?Bir ScrollView öğesinin geçerli Y ofseti nasıl elde edilir

cevap

1
+4

Bu yöntemler korunur ve bu nedenle yalnızca ScrollView alt sınıfını kullanıyorsanız erişilebilir. –

+0

Teşekkürler, Cristian, çözümün bana yardımcı oldu. ScrollView'dan zaten bir alt sınıf görünümü aldım. Bir dinleyici setOnScrollViewListener (http://www.nicholasmelnick.com/entries/104) ile hesaplanmalıdır. Ayrıca getScrollY() ile ilk çözüm doğru çalışır. – CoolMind

46

ScrollView'de getScrollY() öğesini çağırın. Daha fazla bilgi için buraya bakınız: Eğer getScrollY() veya getTop() kullandıktan sonra bazı değer elde gerektiğini eminseniz http://developer.android.com/reference/android/view/View.html#getScrollY%28%29

+1

Belirli aralıklarla artan bir içeriğe (bir günlük görünümü gibi) sahip bir textView öğesini kaydırma işleminin, metnin son satırını gösterip göstermediğini görmek istedim. Bu yaptı: boolean lastLineVisible = scrollView.getScrollY() + scrollView.getHeight() + 100> = textView.getHeight() ' –

4

, Şimdi çalışmalıdır bir

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

içindeki bu yöntemi koymak deneyin. Bu yöntemle ilgili anlayışıma göre, yalnızca düzenin çizilmesinden sonra çalışacaktır. Bu, daha önce 0 almayı sürdürmenizin sebeplerinden biri olabilir. Umarım yardımcı olur.

0

Aşağıdakileri elde etmeyi başardım. Önce ekran yüksekliğini ve genişliğini alın. Sonra

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

(neyi gösteriliyor toplam ve ne ekranın dışında) belge yüksekliğini öğrenmek için

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

Son olarak ofset

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

Bu almak için görebildiğiniz belgenin bölümüne göre pencerenin en üstünü gösterecek şekilde bir olayın tam konumunu

public boolean onTouchEvent(MotionEvent event) { 
     int y = event.getY() + (int) getTopY(); 
    } 

Ayrıca

2

Neden böyle bir şey denemiyorsunuz genişliğe işlemek için benzer bir şey yapabilir?

targetScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { 
     @Override 
     public void onScrollChanged() { 
      int scrollX = targetScrollView.getScrollX(); 
      Log.d(TAG, "scrollX: " + scrollX); 
     } 
    }); 
İlgili konular