package com.duguang.baseanimation.ui.flip;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.BaseAdapter;
import com.aphidmobile.flip.FlipViewController;
import com.duguang.baseanimation.R;
/*
Copyright 2012 Aphid Mobile
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/**
* NOTES: Both FlipViewController and WebView are not lightweight UI widgets, please re-consider
* your design before combining them together. <p/> This demo is only for illustrative purpose.
* Please refer to the comments inside it for more details.
*/
public class FlipWebViewActivity extends Activity {
private FlipViewController flipView;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(R.string.activity_title);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
//flip horizontally may be the better choice as most web pages need scroll vertically
flipView = new FlipViewController(this, FlipViewController.HORIZONTAL);
flipView.setAdapter(new MyBaseAdapter(this, flipView));
setContentView(flipView);
}
@Override
protected void onResume() {
super.onResume();
flipView.onResume();
}
@Override
protected void onPause() {
super.onPause();
flipView.onPause();
}
private static class MyBaseAdapter extends BaseAdapter {
List<String> urls = new ArrayList<String>();
FlipViewController controller;
Activity activity;
int activeLoadingCount = 0;
private MyBaseAdapter(Activity activity, FlipViewController controller) {
this.activity = activity;
this.controller = controller;
urls.add("http://www.github.com");
urls.add("http://www.amazon.com");
urls.add("http://www.yahoo.com");
urls.add("http://www.google.com");
}
@Override
public int getCount() {
return urls.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
WebView webView = new WebView(controller.getContext());
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
activity.setProgressBarIndeterminateVisibility(true);
activeLoadingCount++;
}
@Override
public void onPageFinished(WebView view, String url) {
controller.refreshPage(
view);//This works as the webView is the view for a page. Please use refreshPage(int pageIndex) if the webview is only a part of page view.
activeLoadingCount--;
activity.setProgressBarIndeterminateVisibility(activeLoadingCount == 0);
}
});
webView.setWebChromeClient(new WebChromeClient() {
private int lastRefreshProgress = 0;
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress - lastRefreshProgress
> 20) { //limit the invocation frequency of refreshPage
controller.refreshPage(view);
lastRefreshProgress = newProgress;
}
}
});
webView.loadUrl(urls.get(position));
return webView;
}
}
}