我创建了一个包含horizontalscrollview的自定义视图。现在当我改变方向时,它的滚动状态每次都变为0。
我使用onSaveInstanceState(Bundle savedInstanceState)
和onRestoreInstanceState(Bundle savedInstanceState)
获得了之前的滚动状态。在onRestoreInstanceState
我正在使用以下方法来重新定位滚动,
hoz_scroll.scrollTo(hoz_x_pos, hoz_scroll.getScrollY());
但根本没有效果。 帮助赞赏。感谢。
答案 0 :(得分:3)
如果每次方向更改时都必须调用onCreate,则位置会重置。 您可以通过添加更改为清单的方向来避免它,但不确定当前滚动状态是否完好。 我几天前研究过它。如果你的界面在每个方向上都有stadar维度,那么你可以通过抽取很多滚动值找到一个方程式。
使用getScrollY()创建一个地图,其中包含显示相同文本的横向和纵向的值。更多的价值更好。然后使用多项式插值使用matlab或papper创建多项式方程。 更多值 - >更准确 http://en.wikipedia.org/wiki/Polynomial_interpolation
也必须像这样滚动到某个位置
hoz_scroll.post(new Runnable() {
public void run() {
scroller.scrollTo(hoz_x_pos,hoz_scroll.getScrollY());
}
});
答案 1 :(得分:2)
我相信你需要设置
android:configChanges="orientation"
在AndroidManifest.xml
的活动元素中。
然后您需要覆盖活动中的public void onConfigurationChanged(Configuration config)
。
答案 2 :(得分:0)
将此代码放入Activity中,以便在方向更改时不滚动它。你甚至不需要编码。
@Override
public void onConfigurationChanged(Configuration config){
super.onConfigurationChanged(config);
}
答案 3 :(得分:0)
这是一个有效的解决方案:
private ScrollView scroll;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_content);
TextView title=(TextView) findViewById(R.id.textView1);
TextView content=(TextView) findViewById(R.id.textView2);
title.setText(getIntent().getStringExtra("title"));
content.setText(getIntent().getStringExtra("content"));
scroll = (ScrollView) findViewById(R.id.scrollView1);
if(savedInstanceState!=null){
final int y=savedInstanceState.getInt("position");
scroll.post(new Runnable() {
public void run() {
scroll.scrollTo(0,y);
}
});
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("position", scroll.getScrollY());
}