2011-03-01 79 views
1

我創建了一個自定義滾動視圖併爲其動態添加了一些圖像視圖。我所要做的就是在視圖初始化時將scrollview滾動到特定的位置。我使用scrollview.smoothScrollTo()方法將scrollview移動到特定位置。它在Android 2.1中完美工作,但在Android 2.2中無法正常工作。滾動視圖總是進入初始位置。 Whwn我在它正在工作的按鈕的OnClick Listener中使用了相同的方法。請幫忙。smoothScroll方法在onCreate()中不工作

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不滾動到位置。滾動視圖從初始位置開始。

回答

2

問題已解決。我不知道究竟是什麼問題。我使用Handler來設置滾動視圖的偏移值。當我們嘗試在onCreate()中設置滾動視圖的偏移量時發生問題。在其他情況下,假設我們在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

我有同樣的問題。我設法通過重寫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; 
    } 

}