2016-03-03 81 views
1

我的最終目標是停止在特定位置的滾動,以便查看的對象完全顯示,並且我提出的解決方案是通過檢查視圖的scrollX位置觸摸被釋放。我確實有一個動量問題,由於在捕捉觸摸事件之後滾動速度還可以繼​​續,所以我解決了使用MotionEvent.ACTION_CANCEL,我不滿意,因爲scrollTo是令人愉快的,但MotionEvent .ACTION_CANCEL殺死它的效果。在Android上停止滾動視圖在特定位置

我的問題是,有沒有更好的方法來做到這一點?如果我可以簡單地指示我的ScrollView不具有動量/速度,理想狀態就是如此。

myView.setOnTouchListener(new HorizontalScrollView.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_UP) { 
       event.setAction(MotionEvent.ACTION_CANCEL); 
       int x = myView.getScrollX(); 
       if (x < 150) 
        myView.scrollTo(0,0); 
       else if (x<450) 
        myView.scrollTo(300,0); 
       else 
        myView.scrollTo(600,0); 
      } 
      return false; 
     } 
    }); 

回答

0

如果您想精確滾動以顯示特定視圖,this answer應該對您有幫助。你需要做的是在UI線程上調用myView.scrollTo(0, view.getBottom())myView.smoothScrollTo(0, view.getBottom())。這樣,view對象將完全顯示。


編輯:在我看來,你想在這裏實現的是非常接近到什麼ViewPager做:你的目的是要與刷卡/掃視姿勢的視圖之間移動,提供完全可視的分頁瀏覽內容。

如果你使用ViewPager,這是怎麼了你的代碼可能已經看過:

viewPager.setAdapter(new PagerAdapter() { 

      @Override 
      public boolean isViewFromObject(View view, Object object) { 
       return view == object; 
      } 

      @Override 
      public int getCount() { 
       return getViewCount(); 
      } 

      @Override 
      public Object instantiateItem(ViewGroup container, int position) { 
       View view = getViewAtPosition(position); 
       container.addView(view); 
       return view; 
      } 

      @Override 
      public void destroyItem(ViewGroup container, int position, Object view) { 
       container.removeView((View) view); 
      } 
     }); 

getViewCount()getViewAtPosition()方法必須相應地實現你想要多少顯示的視角,他們被實例化的方式。

+0

謝謝,這方面我沒問題。當使用OnTouchListener應用時,您描述的方法效果不佳,因爲調用聚焦方法後滾動速度可能會發生殘留滾動。 – Gil

+0

謝謝,這個ViewPager似乎是我正在尋找的功能。 – Gil

0

如果您想在scrollView滾動時獲取當前位置,則應該使用onScrollListener

scrollView.getViewTreeObserver().addOnScrollChangedListener(new OnScrollChangedListener() { 

    @Override 
    public void onScrollChanged() { 

     int scrollX = rootScrollView.getScrollX(); //for horizontalScrollView 
     int scrollY = rootScrollView.getScrollY(); //for verticalScrollView 
     //DO SOMETHING WITH THE SCROLL COORDINATES 

    } 
}); 
相關問題