Timer 를 사용 하여 웹 페이지 의 등 속 로 딩 을 실현 하 는 진도 바 스타일
만약 에 이렇게 진 도 를 progressBar 에 설정 하면 체험 감 이 상당히 떨어진다.다음 그림 과 같다.
지금 우 리 는 웹 페이지 를 불 러 올 때 사용자 에 게 고 른 속도 로 불 러 오 는 느낌 을 주 고 싶 습 니 다.비록 그 가 웹 페이지 를 진정 으로 불 러 오 는 진도 가 아니 지만,우 리 는 웹 페이지 가 처음 불 러 온 후 웹 페이지 로 딩 이 끝나 기 전에 고 른 속도 로 불 러 오 는 효 과 를 모 의 해 야 합 니 다.즉,웹 뷰 클 라 이언 트 의 onPageStarted()방법 을 다시 쓰 고 그 중에서 타 이 머 를 켜 는 것 입 니 다.onPageFinished()를 다시 쓰 고 타 이 머 를 닫 아 웹 페이지 를 고 르 게 불 러 오 는 효과 가 있 습 니 다.타 이 머 를 언급 하면 관련 된 것 을 말 할 수 밖 에 없습니다.
쉽게 말 하면 두 가지 로 나 뉘 는데 하 나 는 Timer 이 고 다른 하 나 는 timer 가 수행 할 계획 이나 임무(Task)입 니 다.이 임무(task)를 타이머(timer)에 설정 하고 타이머(timer)가 언제 임 무 를 수행 하 는 지 알려 주 는 것 입 니 다.임 무 는 우리 가 해 야 할 일 입 니 다.이렇게 말 하면 타이머 가 알 람(Timer)을 원한 다 고 할 수 있 습 니 다.임 무 는 우리 가 일어 나 는 것 과 같다.자명종 이 우리 가 설정 한 시간 까지 실 행 될 때(schedule)일어나 야 한다 고 일 깨 워 준다.
Timer 가 지정 한 임 무 를 수행 하 는 데 는 몇 가지 방법 이 있 습 니 다.
// 。
public void schedule(TimerTask task, Date when) {}
//
public void schedule(TimerTask task, long delay) {}
//
public void schedule(TimerTask task, long delay, long period) {}
//
public void schedule(TimerTask task, Date when, long period) {}
onPageStarted()에서 저 희 는 타 이 머 를 켜 서 50ms 마다 progress+1 을 시작 합 니 다.onPageFinished()가 타 이 머 를 취소 할 때 까지.package com.example.timerdemo;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
public class MainActivity extends Activity {
private ProgressBar progressbar;
private Activity _rootActivity;
private WebView webView;
private WebClient webClient;
private Timer timer = new Timer();
private int currentProgress = 0;
String url = "http://appagent.gyfc.net.cn/NewHouse/index";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressbar = (ProgressBar) findViewById(R.id.web_progressbar);
webView = (WebView) findViewById(R.id.webView);
webClient = new WebClient();
webView.setWebViewClient(webClient);
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
if (newProgress == 100) {
stopTimeTask();
progressbar.setVisibility(View.GONE);
} else {
if (newProgress > currentProgress) {
progressbar.setProgress(newProgress);
currentProgress = newProgress;
}
}
}
});
findViewById(R.id.btn).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
webView.loadUrl(url);
}
});
}
class WebClient extends WebViewClient{
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon);
startTimeTask();
}
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
stopTimeTask();
}
}
/**
*
*/
private void startTimeTask() {
stopTimeTask();
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (currentProgress < 90) {
currentProgress += 1;
progressbar.setProgress(currentProgress);
} else {
stopTimeTask();
}
}
});
}
}, 0, 50);
}
/**
*
*/
private void stopTimeTask() {
if (timer != null) {
timer.cancel();
timer = null;
}
}
}
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/web_progressbar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="3dp"
android:progressDrawable="@drawable/progressbar_bg_style" />
<WebView
android:id="@+id/webView"
android:layout_below="@id/web_progressbar"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text=" "
android:layout_alignParentBottom="true"
android:background="#e5e5e5"/>
</RelativeLayout>
실행 효 과 는 다음 과 같다.위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 Timer 를 사용 하여 웹 페이지 의 등 속 로 딩 을 실현 하 는 진도 스타일 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 여러분 에 게 답 할 것 입 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바스크립트로 타이머 만들기JavaScript와 HTML만 사용하여 간단한 타이머를 만들어 보겠습니다. 먼저 인터페이스를 만들고 HTML만 사용하여 간단한 작업을 수행합니다. HTML 구조에서 시간 정보를 표시하기 위해 일부span가 생성되었...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.