2011-10-03 22 views
7

HorizontalScrollView'a kayan oklar ekleyerek, kullanıcının mevcut görünümün dışında daha fazla öğe olduğunu bilmesini sağlayacağım.En yüksek HorizontalScrollView kaydırma miktarını elde edin

İhtiyacım olan şey, Görünümün en çok üzerine kaydırılmış olup olmadığını nasıl anlamanız gerektiğidir. getMaxScrollAmount() yönteminin size bunu vereceğini düşündünüz - bu benim kodumda Görünümün genişliğini veriyor. Git nedenini anla. İşte benim kod - güzel ve basit: Yukarıdaki hata ayıklama gelen

final ImageView leftArrow = (ImageView) toReturn.findViewById(R.id.leftArrow); 
    final ImageView rightArrow = (ImageView) toReturn.findViewById(R.id.rightArrow); 

    final HorizontalScrollView scrollView = (HorizontalScrollView) toReturn.findViewById(R.id.actionBarHoriztonalScroll); 


    final GestureDetector gd = new GestureDetector(new SimpleOnGestureListener() { 
     @Override 
     public boolean onScroll(MotionEvent e1, 
           MotionEvent e2, 
           float distanceX, 
           float distanceY) { 
      if(scrollView.getScrollX() == 0) { 
       leftArrow.setVisibility(View.GONE); 
      } else { 
       leftArrow.setVisibility(View.VISIBLE); 
      } 
      if(scrollView.getScrollX() == scrollView.getMaxScrollAmount() || 
       scrollView.getMaxScrollAmount() == 0) { 
       rightArrow.setVisibility(View.GONE); 
      } else { 
       rightArrow.setVisibility(View.VISIBLE); 
      } 

      Log.v(ClientDetailsFragment.class.getSimpleName(), "max: " + scrollView.getMaxScrollAmount() + 
                  "current: " + scrollView.getScrollX()); 
      return super.onScroll(e1, e2, distanceX, distanceY); 
     } 
    }); 

    scrollView.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View arg0, MotionEvent ev) { 
      gd.onTouchEvent(ev); 
      return false; 
     } 
    }); 

Çıktı:

10-03 14:36:16.343: VERBOSE/(20508): max: 240 current: 126 
10-03 14:36:16.363: VERBOSE/(20508): max: 240 current: 127 
10-03 14:36:16.386: VERBOSE/(20508): max: 240 current: 132 
10-03 14:36:16.398: VERBOSE/(20508): max: 240 current: 143 
10-03 14:36:16.417: VERBOSE/(20508): max: 240 current: 149 
10-03 14:36:16.433: VERBOSE/(20508): max: 240 current: 152 
10-03 14:36:16.449: VERBOSE/(20508): max: 240 current: 152 
10-03 14:36:16.468: VERBOSE/(20508): max: 240 current: 152 

cevap

19

olmalıdır yatay Scrollview çocuk (152 bu durumda Max) doğru genişlik. Bunu en fazla kaydırma miktarı olmalıdır.

ViewTreeObserver vto = scrollView.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     scrollView.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
     Log.e("ScrollWidth",Integer.toString(horizontalScrollview.getChildAt(0) 
       .getMeasuredWidth()-getWindowManager().getDefaultDisplay().getWidth())); 

    } 
}); 
+0

verir senin onCreate yönteminde aşağıdaki kodu yerleştirin "0" xml şişirildikten sonra o onCreateView genişlik var için. 'FindById' yapmak bile 0 genişliğini verir - kesinlikle neden hiçbir fikir. İyi fikir olsa! Görünümler gerçekte ekranda çizilmeden önce – Graeme

+2

oncreate atıldı. Düzen çizildikten sonra yalnızca doğru genişliği alabilirsiniz. Koridorumu güncelledim. – blessenm

+0

Büyük bir açıklama, açıklama ve ortaya konulduktan sonra bir görünümün gerçek genişliğini elde etmenin yolu! – Graeme

İlgili konular