android webview点击图片放大,【原创】点击webview里的图片放大->Android与JS交互

废话不多说,直接上代码:

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

75d087ef9a9fb11dc373caaf33adbf7f.png

微信打赏

支付宝打赏

感谢您对作者kyle的打赏,我们会更加努力!    如果您想成为作者,请点我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值