我创建了一个自定义滚动视图,并动态添加了一些图像视图。我想要做的就是在初始化视图时将scrollview滚动到特定位置。我使用scrollview.smoothScrollTo()方法将scrollview移动到特定位置。它在Android 2.1中完美运行,但在Android 2.2中它无法正常工作。 scrollview始终转到初始位置。我在按钮的OnClick Listener中使用了相同的方法,它正在工作。请帮忙。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.galleryitem_details);
hscrollView = (HorizontalScrollView)findViewById(R.id.photolist_scrollview);
addImages();
hscrollView.smoothScrollTo(1000, 0);
}
private void addImages() {
for(int i = 0; i< 10; i++) {
View imageDetailView = View.inflate(this, R.layout.gallery_image, null);
ImageView image = (ImageView)imageDetailView.findViewById(R.id.gallery_imagebig);
TextView txtView = (TextView)imageDetailView.findViewById(R.id.imageBigText);
ProgressBar spinner = (ProgressBar)imageDetailView.findViewById(R.id.gallery_scrollimage);
txtView.setWidth(screenWidth);
imageDetailView.setBackGroundResource(R.drawable.icon);
txtView.setText(PHGalleryActivity.galleryImages.get(i).getImageCaption());
imageDetailLayout.addView(imageDetailView);
}
/*
* Set the position of scroll view.
*/
}
hscrollview未滚动到该位置。 scrollview从初始位置开始。
答案 0 :(得分:2)
问题解决了。我不知道到底是什么问题。我使用Handler来设置scrollview的偏移值。当我们尝试在onCreate()中设置scrollview的偏移量时会发生问题。在其他情况下假设我们在onClick()中设置了偏移值,这在没有使用处理程序的情况下完美地工作。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.galleryitem_details);
hscrollView = (HorizontalScrollView)findViewById(R.id.photolist_scrollview);
addImages();
updateUI();
}
class MHandler extends Handler {
public void handleMessage(Message msg) {
PHGalleryItemActivity.this.updateUI();
}
public void sleep(long delayMillis) {
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), delayMillis);
}
};
private void updateUI(){
mHandler.sleep(0);
hscrollView.smoothScrollTo(1000, 0);
}
答案 1 :(得分:1)
我遇到了同样的问题。我设法通过覆盖HorizontalScrollview的子类的onDraw()方法来解决它。在super.onDraw()返回后,我在MainActivity上调用一个方法。 这个方法第一次被调用时,会执行smoothScrollTo(x,0),它可以在onCreate方法中替换smoothScrollTo()。
在子类HorizontalScrollView中:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
MainActivity act = (MainActivity) this.getContext();
act.horizontalScrollViewDrawn();
}
在MainActivity中:
private boolean firstRun = true;
private hsv= null;
public onCreate(...){
..
hsv = (HorizontalScrollView) findViewById(R.id.hsv);
..
}
public void horizontalScrollViewDrawn() {
if(firstRun){
hsv.smoothScrollTo(X, 0);
firstRun = false;
}
}