我在使用 Scroller 以编程方式滚动 ScrollView 时遇到问题,因此到目前为止还没有涉及到触摸手势。只要来自传感器的数据在一定范围内,我想以一定的速度向下滚动 ScrollView。所以基本上我想在数据第一次进入有效范围时开始滚动,然后不干扰滚动过程,直到数据再次超出范围。我不想将 onSensorChanged 直接连接到 scrollBy() ,因为它可能无法在其他设备上正常工作。这是我到目前为止所得到的:
在我的 onCreate 中:
tx = new TextView(ShowLyrics.this);
mainscrollarea = (ScrollView) findViewById (R.id.mainscrollarea);
scroller = new Scroller(getApplicationContext(), new LinearInterpolator());
tx.setScroller(scroller);
在我的 onSensorChanged 中:
if(integratedAngle - scrollTolerance > pointzero){ //this is checking for the data range and works so far
if(!scrollingDown){
scrollText("down");
}
}
和 scrollText 函数:
void scrollText(String direction){
if(direction.matches("down")){
scrollingUp = false;
scrollingDown = true;
scroller.forceFinished(true);
int currY = mainscrollarea.getScrollY();
int endY = tx.getHeight();
int distance = endY - currY;
scroller.startScroll(0, currY, 0, -distance, 5000);
}
if(direction.matches("up")){
//nothing yet
}
}
所以现在我已经硬编码了 5 秒来向下滚动,但没有任何反应。onSensorChanged 中 Scroller 的 getCurrY 的 Log.d() 只吐出 0。如果有人能指出我正确的方向,我将不胜感激。