2011-03-01 7 views
1

사용자 지정 스크롤 뷰를 만들고 여기에 일부 이미지 뷰를 동적으로 추가했습니다. 뷰를 초기화 할 때 스크롤 뷰를 특정 위치로 스크롤하기 만하면됩니다. scrollview.smoothScrollTo() 메서드를 사용하여 scrollview를 특정 위치로 이동했습니다. 그것은 안드로이드 2.1에서 완벽하게 작동하지만 안드로이드 2.2에서는 작동하지 않습니다. scrollview는 항상 초기 위치로 이동합니다. 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

문제가 해결되었습니다. 정확히 무슨 문제인지 모르겠다. 나는 scrollview의 오프셋 값을 설정하기 위해 Handler를 사용했다. 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

나는 동일한 문제가있었습니다. HorizontalScrollview의 하위 클래스 인 onDraw() 메서드를 재정 의하여 해결했습니다. super.onDraw()가 반환 된 후 MainActivity에 대한 메서드가 호출됩니다. 이 메서드는 처음 호출 될 때 smoothScrollTo (x, 0)을 수행하며 onCreate 메서드에서 smoothScrollTo()를 대체하여 정상적으로 작동합니다. MainActivity에서

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    MainActivity act = (MainActivity) this.getContext(); 
    act.horizontalScrollViewDrawn(); 

} 

:

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

} 
서브 클래 싱에 HorizontalScrollView

관련 문제