smoothScroll方法无法在onCreate()中工作

时间:2011-03-01 11:21:54

标签: android

我创建了一个自定义滚动视图,并动态添加了一些图像视图。我想要做的就是在初始化视图时将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从初始位置开始。

2 个答案:

答案 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)

我遇到了同样的问题。我设法通过覆盖Horizo​​ntalScrollview的子类的onDraw()方法来解决它。在super.onDraw()返回后,我在MainActivity上调用一个方法。 这个方法第一次被调用时,会执行smoothScrollTo(x,0),它可以在onCreate方法中替换smoothScrollTo()。

在子类Horizo​​ntalScrollView中:

@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;
    }

}