2013-02-01 2 views
2

WebView에로드 된 페이지를 위에서 아래로 자동 스크롤하려는 경우, 특정 ms 수에 따라 특정 픽셀 수를 지정합니다. 나는이 스레드를 보았습니다 : +Android Webview - how to autoscroll a page?하지만 다른 많은 스레드에서는 타이머를 사용하는 것이 좋지 않다고 말했기 때문에 핸들러에는 this tutorial을 사용했습니다. 즉, 처리기를 작성했습니다. 지금 내 코드는 다음과 같습니다 :핸들러를 사용하여 WebView 자동 스크롤

한 번만 호출하면 (다시 호출하는 마지막 줄을 제거하면) 작동하고 작동을 멈추고 중지합니다. 그러나 내가이 코드로 점차 아래로 스크롤하려고하면보기가 무효화되지 않는 것 (또는 무효화되고 있지만 다시 그려지지 않음)입니다. 디버거를 사용하면 WebView의 mScrollY 속성이 증가했지만보기가 이동하지 않는다는 것을 알 수 있습니다.

내 생각 엔 시스템이보기에 대한 모든 변경 사항을 다시 그리기를 기다리는 것 같습니다. 모든 반복 또는 더 좋은 방법으로 뷰를 업데이트 할 수있는 방법이 있습니까?

참고 : 질문과 관련이 없으므로 페이지 체크 및 중지 버튼을 배치하지 않았습니다.

답변

3

답변을 찾았습니다.

private Runnable mScrollDown = new Runnable() 
{ 
    public void run() 
    { 
     WebView webview = (WebView)findViewById(R.id.web_url); 
     webview.scrollBy(0, scrollSpeed); 
     mHandler.postDelayed(this, 200); 
    } 
}; 

postAtTime 대신 postDelayed를 사용하여 수정했습니다. postAtTime (runnable, 0)은 루프를 시작하는 동안 작동하지만 postAtTime은 두 번째 매개 변수로 시간을 예상합니다. 늦었지만 즉시 두 번째 (및 다음) 반복을 수행 했으므로 200ms 만 경과 했으므로 시간이 필요하지 않습니다. 묘화되는 요소 postDelayed는 다시 실행하기 전에 많은 수의 ms가 기다릴 것으로 예상하므로 시스템에서 창을 다시 그리는 시간과 다른 이벤트를 수행 할 시간을 갖습니다.

+0

스크롤을 어떻게 멈 춥니 까? – rafraph

0
ScrollView scroll = (ScrollView) findViewById(R.id.scroll); 
scroll.scrollTo(0, webview .getTop());//if want to go on top 
scroll.scrollTo(0, webview .getBottom());//if want to go on top 
+0

당신이 내 질문을 읽었는지 확실치 않습니다 ... 스크롤보기가 아닌 webview이고 다른 것들을 제어 할 수있는 양, 천천히, 즉시 스크롤 다운 할 수 있기를 바랍니다. – Shurikn