我在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)
,其中oldl
和oldt
分别是旧的水平和垂直原点。所以,我从中解释的是,当我通过触摸屏幕滚动时,这些原点值会发生变化。所以,我也试过调用onScrollChanged(newX, newY, 0, 0)
,但这只是冻结屏幕,没有滚动。难道我做错了什么?还有什么其他更好的方法可以解决这个问题?
答案 0 :(得分:0)
这里的问题看起来就像你说的那样,当你触摸时,HorizontalScrollView的位置会发生变化。
因此,一个解决方案可能是找到滚动视图的初始左上角位置
HorizontalScrollView hsv = (HorizontalScrollView) findViewById(R.id.ScrollView);
int x, y;
x = hsv.getLeft();
y = hsv.getTop();
并始终相对于这些存储的x,y位置滚动您的子视图,即
childView.scrollTo(x+newXPos,y+newYPos);