1

我在Android應用程序中定製了View,它被放在HorizontalScrollView的內部,如圖所示。滾動查看發生在觸摸滾動的位置後

<HorizontalScrollView 
      android:id="@+id/feedBackScroller" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scrollbars="none"> 

      <com.my.views.OfflineFeedbackView 
       android:id="@+id/feedBackView" 
       android:layout_width="wrap_content" 
       android:layout_height="match_parent" 
       android:layout_marginTop="@dimen/session_rec_page_title_bar_height" 
       android:layout_marginBottom="@dimen/session_rec_page_ctrl_bar_height"/> 

</HorizontalScrollView> 

OfflineFeedbackView表明,我玩的音頻軌道的間隔賽道,我滾動通過基於當前播放時間調用scrollTo(newXPos, newYPos)這一觀點。我面臨的問題是,如果通過觸摸滾動屏幕然後開始播放,滾動的引用似乎在我的視圖中發生變化,並且滾動發生在通過觸摸滾動到的位置。我瀏覽了API文檔,發現scrollTo(newXPos, newYPos)內部調用onScrollChanged(int l, int t, int oldl, int oldt),其中oldloldt分別是舊的水平和垂直原點。所以,我從中解釋的是,當我通過觸摸屏幕來滾動這些原點值時就會發生變化。所以,我也試過撥打onScrollChanged(newX, newY, 0, 0),但這只是凍結了屏幕,沒有滾動。難道我做錯了什麼?什麼可以是其他更好的方法來處理這個問題?

回答

0

這裏的問題看起來像你說的那樣Horizo​​ntalScrollView的位置在觸摸時會發生變化。

所以,一個解決方案可能會發現你的滾動視圖的初始左上位置

HorizontalScrollView hsv = (HorizontalScrollView) findViewById(R.id.ScrollView); 
int x, y; 
x = hsv.getLeft(); 
y = hsv.getTop(); 

,總是你的子視圖相對滾動到這些存儲的X,Y位置即

childView.scrollTo(x+newXPos,y+newYPos);