这里是个人使用SwipeRefreshLayout的一些总结,如果有什么不恰当的地方,请大家见谅。
SwipeRefreshLayout是google官方推出的一个下拉刷新的控件,具体效果的话,大家可以在网上找一下,因为这个刷新在手机里,不容易截屏。
不多说了,直接上代码
xml文档
1.main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/webtview"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</WebView>
</android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>
在SwipeRefreshLayout中添加了WebView组件进行访问网页,实现网页的下拉刷新。WebView的介绍在上一篇里已经介绍过了,这里就不多说了。
2.AndroidMainifset.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wei.swipetest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/titleBarStyle">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
3.MainActivity.java
package com.wei.swipetest;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;
public class MainActivity extends Activity implements SwipeRefreshLayout.OnRefreshListener
{//声明SwipeRefreshLayout对象
private SwipeRefreshLayout swipeRefreshLayout;
private WebView webView;//声明WebView对象
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//通过findviewbyid找到布局文件中的声音的组件
swipeRefreshLayout=(SwipeRefreshLayout)findViewById(R.id.swipe);
webView=(WebView)findViewById(R.id.webtview);
//定义刷新时的动画样式
swipeRefreshLayout.setColorScheme(android.R.color.holo_red_light, android.R.color.holo_green_light,
android.R.color.holo_blue_bright, android.R.color.holo_orange_light);
//设置监听 swipeRefreshLayout.setOnRefreshListener(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
// TODO Auto-generated method stub
swipeRefreshLayout.setRefreshing(true);//开启刷新动画
setProgress(newProgress*100);
if (newProgress==100) //等于100的时候,说明网页加载完成,完成之后停止刷新动画
{
swipeRefreshLayout.setRefreshing(false);//停止刷新动画
}
super.onProgressChanged(view, newProgress);
}
});
webView.loadUrl("http://www.baodu.com");
webView.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "网络连接失败 ,请连接网络。", Toast.LENGTH_SHORT).show();
super.onReceivedError(view, errorCode, description, failingUrl);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
});
}
@Override
public void onRefresh() {//下拉时调用这个函数,此时会自动开始加载动画
// TODO Auto-generated method stub
webView.reload();//网页的重新载入,会调用onProgressChanged函数,进而开启加载动画
}
//按键监听的函数,当按下back键时进行网页的后退
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
/*if(keyCode==KeyEvent.KEYCODE_BACK)
{
if (webView.canGoBack())
{
webView.goBack();
return true;
}else finish();
}*/
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
运行的原理
在第一次进行载入的时候,在载入的过程中,会调用onProgressChanged函数,在这个函数中,先开启刷新动画,当进度到100时,终止刷新动画。
之后下拉的时候会调用onRefresh函数,这个函数中调用reload函数进行页面的重新载入,重新载入的时候又会调用onProgressChanged函数,这样就完成了下拉刷新功能的实现。
在网上看的进度条是条形的,自己写的时候可能是圆形的,当也是彩色进行变化的,这个是因为使用的sdk的版本不同。具体怎么解决,我还没有找到办法,希望有找到的人给我说一下,在这里感谢了先。O(∩_∩)O~~