Android webview图片点击事件 查看图片

思路:

1.webview与js交互;
2.webview添加ontouchListener;
3.通过onTouch实现点击事件,获得点击的x、y坐标;
4.通过x、y坐标的位置,使用js方法获得图片地址 ,完成点击事件;

优点:

点击事件是通过webview实现,而html只需要获取图片的地址。

代码
public class MainActivity extends Activity implements View.OnTouchListener {

    private String url = "http://news.sina.com.cn/china/xlxw/2016-10-23/doc-ifxwztru6946123.shtml";

    private WebView webview;
    @SuppressLint("JavascriptInterface")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webview = (WebView) findViewById(R.id.web_view);

        webview.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return super.shouldOverrideUrlLoading(view, url);
            }
        });
        webview.loadUrl(url);//登陆一个有图片的URL
        webview.getSettings().setJavaScriptEnabled(true); //支持JS
        webview.addJavascriptInterface(new JsInterface(this), "imageClick"); //JS交互
        webview.setOnTouchListener(this);
    }


    class JsInterface{
        Context context;
        public JsInterface(Context context){
            this.context = context;
        }

        //查看图片url
        @JavascriptInterface
        public void click(String url){
            Intent intent = new Intent();
            intent.putExtra("IMG_URL", url);
            intent.setClass(MainActivity.this, ImageShowActivity.class);
            startActivity(intent);
        }
    }

    float x,y;


    @Override
    public boolean onTouch(View v, MotionEvent event) {
        //通过wenview的touch来响应web上的图片点击事件
        float density = getResources().getDisplayMetrics().density; //屏幕密度
        float touchX = event.getX() / density;  //必须除以屏幕密度
        float touchY = event.getY() / density;
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            x = touchX;
            y = touchY;
        }

        if(event.getAction() == MotionEvent.ACTION_UP){
            float dx = Math.abs(touchX-x);
            float dy = Math.abs(touchY-y);
            if(dx<10.0/density&&dy<10.0/density){
                clickImage(touchX,touchY);
            }
        }
        return false;
    }

    private void clickImage(float touchX, float touchY) {
        //通过触控的位置来获取图片URL
        String js = "javascript:(function(){" +
                "var  obj=document.elementFromPoint("+touchX+","+touchY+");"
                +"if(obj.src!=null){"+ " window.imageClick.click(obj.src);}" +
                "})()";
        webview.loadUrl(js);
    }
}

项目源码地址 [https://github.com/chenzongwen/ShowWebViewImage]

Android WebView中实现图片点击事件,主要通过以下步骤: 1. 首先,需要注入JavaScript代码到WebView中,以便响应图片点击事件。可以使用WebView的addJavascriptInterface()方法将一个Java对象注入到WebView中,这个Java对象可以作为JavaScript对象在WebView中调用。 2. 创建一个自定义的Java类,例如ImageJavascriptInterface,该类包含一个openImage()方法,用于处理图片点击事件。在openImage()方法中,可以执行跳转到图片查看页面等操作。 3. 在WebViewWebViewClient中的onPageFinished()方法中,通过执行JavaScript代码,为每个图片添加点击事件监听器,并调用注入的Java对象的openImage()方法。这样当用户点击图片时,会触发openImage()方法,并传递图片的URL和位置信息。 4. 最后,将HTML数据加载到WebView中,可以使用loadData()方法。 综上所述,通过注入JavaScript代码和自定义的Java对象,可以实现在Android WebView中响应图片点击事件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [android webview js交互, 响应webview中的图片点击事件](https://download.csdn.net/download/zlb_lover/9654404)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Android webview中的图片点击事件](https://blog.csdn.net/weixin_42273922/article/details/106781799)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值