监听webview显示完毕事件

来源:互联网 发布:2017 大数据 大会 编辑:程序博客网 时间:2024/06/05 08:38

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">   项目中有这样一个需求:打开某份邮件,在邮件下载显示完毕后对正文中插入的图片加密;再次打开邮件先解密,保证邮件正文中的图片可以正常显示,在此之后再次加密,避免用户直接在rom中打开图片</span>

  写了一个demo,思路是webview加载数据,显示完毕后对图片加密,下次加载数据前解密,显示完毕后再次加密

  闲话少叙,上代码:

  重写WebView,命名为MyWebView.java

  

package com.itheima38.demo;import android.content.Context;import android.graphics.Canvas;import android.util.AttributeSet;import android.util.Log;import android.webkit.WebView;public class MyWebView extends WebView{private boolean isRendered = false;interface DisplayFinish{void After();}DisplayFinish df;public void setDf(DisplayFinish df) {this.df = df;}public MyWebView(Context context, AttributeSet attrs) {super(context, attrs);}public MyWebView(Context context) {super(context);}//onDraw表示显示完毕@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if(!isRendered && null!=df && getContentHeight()>0){      Log.d("MyWebView", "getContentHeight():"+getContentHeight());      df.After();      isRendered = true;}}}

  act_b.xml

<LinearLayout 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"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <!-- <Button        android:id="@+id/btn1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="b1" />    <Button        android:id="@+id/btn2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="b2" />    <Button        android:id="@+id/btn3"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="b3" /> -->                <com.itheima38.demo.MyWebView            android:id="@+id/my_webview"            android:layout_width="match_parent"            android:layout_height="300dp"            android:layout_marginTop="200dp" /></LinearLayout>

  ActB.java

package com.itheima38.demo;import com.itheima38.demo.MyWebView.DisplayFinish;import com.itheima38.demo.R;import android.app.Activity;import android.app.Dialog;import android.app.ProgressDialog;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Button;import android.widget.Toast;public class ActB extends Activity{private Button btn1;private Button btn2;private Button btn3;private MyWebView myWebView;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.act_b);//======网页显示完毕myWebView = (MyWebView)findViewById(R.id.my_webview);myWebView.setWebViewClient(new WebViewClient(){@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return true;}@Overridepublic void onPageFinished(WebView view, String url) {// TODO Auto-generated method stubsuper.onPageFinished(view, url);myWebView.setDf(new DisplayFinish(){   @Overridepublic void After()   System.out.println("页面显示完毕");   //图片加密   }});}});String baseUrl = Environment.getExternalStorageDirectory().getAbsolutePath() + "/abc/";System.out.println("baseUrl="+baseUrl);// baseUrl=/storage/emulated/0/abc/String data = "<html><head><title>test</title></head><body>白日依山尽<br />黄河入海流<br />欲穷千里目<br />更上一层楼<br /><img src='file://"+baseUrl+"test.png' /></body></html>";myWebView.loadDataWithBaseURL(baseUrl, data, "text/html", "utf-8", null);}}

0 0