简单齐全的webview与H5 交互 多中自定义进度条
来源:互联网 发布:淘宝一般违规累计扣分 编辑:程序博客网 时间:2024/06/06 10:07
简单齐全的webview与H5 交互 多中自定义进度条
demo下载
http://download.csdn.net/detail/menglele1314/9213035
/****************************红色的可以重点看下*************************************/
package com.hexun.webview.activity;import com.hexun.webview.view.MyProgressBar;import android.app.Activity;import android.app.Dialog;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.os.CountDownTimer;import android.text.TextUtils;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.view.animation.Animation;import android.view.animation.AnimationUtils;import android.view.animation.LinearInterpolator;import android.widget.Button;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.Toast;/** * * * @author menglele Create at 2015年6月5日下午2:16:39 * */public class MainActivity extends Activity { private Button submit; private TimeCount time; private AnimationDrawable fightnimation, fightnimationab; private ImageView pb, net, netab; private Dialog mLoading; private Animation animation; private MyProgressBar progressBar1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); submit = (Button) findViewById(R.id.btn_login_submit); pb = (ImageView) findViewById(R.id.iv_failure); animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.cirle); animation.setInterpolator(new LinearInterpolator()); netab = (ImageView) findViewById(R.id.iv_netab); netab.setBackgroundResource(R.anim.fight); fightnimationab = (AnimationDrawable) netab.getBackground(); net = (ImageView) findViewById(R.id.iv_net); net.setBackgroundResource(R.anim.loading); fightnimation = (AnimationDrawable) net.getBackground(); progressBar1 = (MyProgressBar) findViewById(R.id.progressBar1); time = new TimeCount(60000, 1000); submit.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) {// // 对话框加载进度条// mLoading = createLoadingDialog(MainActivity.this);// mLoading.show();// // mLoading.dismiss(); // // 常用加载进度条 带动画的// pb.startAnimation(animation);// fightnimationab.start();// fightnimation.start();// // 带刻度值的横向进度条// progressBar1.setProgress(65); startActivity(new Intent(MainActivity.this, WebViewActivity.class)); // time.start();// 开始计时 } }); // 注册广播 registerReceiver(homeKeyEventReceiver, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)); } // 监听home键和菜单键 private BroadcastReceiver homeKeyEventReceiver = new BroadcastReceiver() { String REASON = "reason"; String HOMEKEY = "homekey"; String RECENTAPPS = "recentapps"; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) { String reason = intent.getStringExtra(REASON); if (TextUtils.equals(reason, HOMEKEY)) { // 点击 Home键 Toast.makeText(getApplicationContext(), "Home", 1).show(); } else if (TextUtils.equals(reason, RECENTAPPS)) { // 点击 菜单键 Toast.makeText(getApplicationContext(), "菜单键", 1).show(); } } } }; // 倒计时 class TimeCount extends CountDownTimer { public TimeCount(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } @Override public void onFinish() {// 计时完毕 submit.setText("获取验证码"); submit.setClickable(true); } @Override public void onTick(long millisUntilFinished) {// 计时过程 submit.setClickable(false);// 防止重复点击 submit.setText(millisUntilFinished / 1000 + "s"); } } /** * 得到自定义的progressDialog * * @param context * @return */ public static Dialog createLoadingDialog(Context context) { LayoutInflater inflater = LayoutInflater.from(context); View v = inflater.inflate(R.layout.layout_loading_dialog, null); // 得到加载view LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_view); // 加载布局 ImageView spaceshipImage = (ImageView) v.findViewById(R.id.img); Animation animation = AnimationUtils.loadAnimation(context, R.anim.cirle); // 加载动画 animation.setInterpolator(new LinearInterpolator()); spaceshipImage.startAnimation(animation); // 使用ImageView显示动画 Dialog loadingDialog = new Dialog(context, R.style.loading_dialog); // 创建自定义样式dialog // loadingDialog.setCancelable(false);// 不可以用"返回键"取消 loadingDialog.setContentView(layout, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); return loadingDialog; }}/************************************************************************************************************************/package com.hexun.webview.activity;import android.annotation.SuppressLint;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.net.http.SslError;import android.os.Bundle;import android.util.DisplayMetrics;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.view.Window;import android.webkit.CookieManager;import android.webkit.CookieSyncManager;import android.webkit.JavascriptInterface;import android.webkit.SslErrorHandler;import android.webkit.WebChromeClient;import android.webkit.WebSettings;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.ImageView;import android.widget.ProgressBar;import android.widget.Toast;import com.hexun.webview.network.DataCleanManager;public class WebViewActivity extends Activity { private WebView webView; private ProgressBar pb; private ProgressBar pb1; private ImageView iv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.webview); webView = (WebView) findViewById(R.id.webView); iv = (ImageView) findViewById(R.id.iv_net); pb = (ProgressBar) findViewById(R.id.pb_web); pb1 = (ProgressBar) findViewById(R.id.progressBar1); } @SuppressLint({ "SetJavaScriptEnabled", "JavascriptInterface" }) protected void onStart() { super.onStart(); WebSettings webSettings = webView.getSettings(); webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); webView.addJavascriptInterface(this, "javatojs"); webView.getSettings().setJavaScriptEnabled(true); // WebView加载web资源 // webView.loadUrl(""); // 从assets目录下面的加载html // webView.loadUrl("file:///android_asset/ZheXianR.html"); webView.loadUrl("http://finance.sina.com.cn"); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // 返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器 // 这里也可以用Intent传给其它WebView,的其它浏览器中打开 view.loadUrl(url); return true; } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { // 重写此方法可以让webview处理https请求。 super.onReceivedSslError(view, handler, error); handler.proceed(); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { // 在页面加载开始时调用。 super.onPageStarted(view, url, favicon); webView.setVisibility(View.GONE); pb.setVisibility(View.VISIBLE); } @Override public void onPageFinished(WebView view, String url) { // 在页面加载结束时调用。 super.onPageFinished(view, url); webView.setVisibility(View.VISIBLE); pb.setVisibility(View.GONE); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { // 网络不通,加载失败 super.onReceivedError(view, errorCode, description, failingUrl); view.loadData("网络连接失败,请稍后重试!", "text/html; charset=utf-8", "utf-8"); iv.setVisibility(View.VISIBLE); } @Override public void onLoadResource(WebView view, String url) { // 在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。 super.onLoadResource(view, url); } }); // 主要处理解析,渲染网页等浏览器做的事情 辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等 webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { // 网页加载的进度值newProgress super.onProgressChanged(view, newProgress); pb1.setVisibility(View.VISIBLE); pb1.setProgress(newProgress); if (newProgress == 100) { pb1.setVisibility(View.GONE); } } @Override public void onReceivedTitle(WebView view, String title) { setTitle(title); } }); // 点击后退按钮,让WebView后退一页(也可以覆写Activity的onKeyDown方法) webView.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) { // 表示按返回键 webView.goBack(); // 后退 return true; } } return false; } }); } @JavascriptInterface public void fromWidth() { DisplayMetrics metric = new DisplayMetrics(); // 取得窗口属性 getWindowManager().getDefaultDisplay().getMetrics(metric); int width = metric.widthPixels; // 屏幕宽度(像素) int height = metric.heightPixels; // 屏幕高度(像素) float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5) int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240) webView.loadUrl("javascript:toWidthH5('" + width / density + "')"); } // App调用H5的方法 也可以传参数 @JavascriptInterface public void reqDataFromApp() { webView.loadUrl("javascript:resDataToH5('" + "15858168869" + "')"); } // H5调用App的方法 也可以传参数 @JavascriptInterface public void goToBack() { finish(); } @Override protected void onStop() { DataCleanManager.cleanInternalCache(this); DataCleanManager.cleanSharedPreference(this); // 清除cookie即可彻底清除缓存 CookieSyncManager.createInstance(this); CookieSyncManager.getInstance().startSync(); CookieManager.getInstance().removeAllCookie(); Log.i("WebViewActivity", "<<<<<<<<<<<<<<<<<<<<<<<"); webView.clearCache(true); webView.clearHistory(); System.gc(); finish(); super.onStop(); }} <!-- 自定义进度条 --> <style name="ProgressBarBg" parent="@android:style/Widget.ProgressBar.Horizontal"> <item name="android:maxHeight">10dip</item> <item name="android:minHeight">10dip</item> <item name="android:indeterminateOnly">false</item> <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item> <item name="android:progressDrawable">@drawable/progressbarbg</item> </style>shape=["rectangle" | "oval" | "line" | "ring"]其中rectagle矩形,oval椭圆,line水平直线,ring环形corners 自定义角度gradient 渐变Android:startColor 起始颜色Android:endColor 结束颜色 <?xml version="1.0" encoding="utf-8"?><!-- 自定义进度条 --><layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@android:id/background"> <shape> <corners android:radius="0dip" /> <gradient android:endColor="#ffffff" android:startColor="#ffffff" /> </shape> </item> <item android:id="@android:id/secondaryProgress"> <clip> <shape> <corners android:radius="0dip" /> <gradient android:endColor="#00FF00" android:startColor="#00FF00" /> </shape> </clip> </item> <item android:id="@android:id/progress"> <clip> <shape> <corners android:radius="0dip" /> <gradient android:endColor="#00FF00" android:startColor="#00FF00" /> </shape> </clip> </item></layer-list>
demo下载
http://download.csdn.net/detail/menglele1314/9213035
0 0
- 简单齐全的webview与H5 交互 多中自定义进度条
- 简单齐全的webview与H5 交互 多中自定义进度条
- WebView与H5的交互
- Webview 与h5的交互
- Webview 与h5的交互
- webview与h5交互
- iOS webview与H5的交互
- webview和h5的交互
- iOS webView与H5的交互(返回页面的处理)
- iOS webView与H5的交互(返回页面的处理)
- 基于cordova实现的webview实现与h5的交互
- iOS webView与H5的交互(返回页面的处理)
- 关于webview与H5属性设置以及交互的总结
- Android利用WebView与h5交互的几种形式
- android webview与h5交互时所遇到的坑
- Android中 WebView与Javascript简单交互
- js与webView的简单交互
- WebView与JS的简单交互
- Android简单自定义圆形和水平ProgressBar seekbar select layer-list 转
- 强大的网页性能测试工具--Speed Tracer
- CentOS安装nodejs
- CLRS 8.3基数排序
- 跟着猫哥学Golang[3] - if else
- 简单齐全的webview与H5 交互 多中自定义进度条
- java socket 编程 服务器一直监听
- 反射-访问类变量的方法
- 九度OJ 1189:还是约瑟夫环 (约瑟夫环)
- Storm——Storm集成kafka
- 使用NDK过程中出现“Unresolved inclusion jni.h”
- JS与Native交互初识
- Linux命令大全----系统管理相关命令
- struts2 之配置拦截器使网站页面在session失效后退回到登录页面