废话不多说,直接上代码:
private WebView mWebView;
mWebView.getSettings().setJavaScriptEnabled(true);//这个没的说,首先得支持js
mWebView.loadUrl("www.baidu.com");
mWebView.addJavascriptInterface(new MyJavascriptInterface(this), "imagelistner");//自定义一个MyJavascript接口
mWebView.setWebViewClient(new MyWebViewClient());//MyWebViewClient继承于WebViewClient
MyJavascriptInterface:
// js通信接口
public class MyJavascriptInterface {
private Context context;
public MyJavascriptInterface(Context context) {
this.context = context;
}
@JavascriptInterface //值得注意的是,当你的openImage方法没有被执行,也就是说mWebView.addJavascriptInterface没有作用
那么就请在这里加上@JavascriptInterface,加之前记得先导入
public void openImage(String img) {
System.out.println(img);
Intent intent = new Intent();
intent.putExtra("image", img);
intent.setClass(context, ShowWebImageActivity.class);
context.startActivity(intent);
System.out.println(img);
}
}
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
view.getSettings().setJavaScriptEnabled(true);
super.onPageFinished(view, url);
// html加载完成之后,添加监听图片的点击js函数
addImageClickListner();//这个方法在下面
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
view.getSettings().setJavaScriptEnabled(true);
super.onPageStarted(view, url, favicon);
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
}
}
// 注入js函数监听
private void addImageClickListner() {
// 这段js函数的功能就是,遍历所有的img几点,并添加onclick函数,在还是执行的时候调用本地接口传递url过去
mWebView.loadUrl("javascript:(function(){" +
"var objs = document.getElementsByTagName(\"img\"); " +
"for(var i=0;i
"{"
+ " objs[i].οnclick=function() " +
" { "
+ " window.imagelistner.openImage(this.src); " +
" } " +
"}" +
"})()");
}
显示图片的类
package cn.zmit.xiangrikui.test;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Display;
import android.view.View;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
import cn.zmit.xiangrikui.R;
public class ShowWebImageActivity extends Activity {
private String imagePath = null;
private ImageView imageView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.show_webimage);
imagePath = getIntent().getStringExtra("image");
imageView = (ImageView) findViewById(R.id.show_webimage_imageview);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
com.squareup.picasso.Target target = new com.squareup.picasso.Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
imageView.setImageBitmap(big(bitmap));
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
Picasso.with(this).load(imagePath).into(target);
}
public Bitmap big(Bitmap b) {
Display d = (ShowWebImageActivity.this).getWindowManager().getDefaultDisplay();
int x = d.getWidth();//当前屏幕宽度 px
int y = d.getHeight();//当前屏幕高度 px
int w = b.getWidth();
int h = b.getHeight();
float sx = (float) x / w;//要强制转换,不转换我的在这总是死掉。
float sy = (float) y / h;
float total=Math.min(sx,sy);
Matrix matrix = new Matrix();
matrix.postScale(total, total); // 长和宽放大缩小的比例
Bitmap resizeBmp = Bitmap.createBitmap(b, 0, 0, w,
h, matrix, true);
return resizeBmp;
}
}
转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/16347.html
微信打赏
支付宝打赏
感谢您对作者kyle的打赏,我们会更加努力! 如果您想成为作者,请点我