Android 实现WebView点击图片查看大图列表及图片保存功能

Android 实现WebView点击图片查看大图列表及图片保存功能

简介

在WebView中点击图片可以实现图片查看、图片保存等功能是非常常见且实用的功能,本文将详细介绍如何在Android中实现WebView点击图片查看大图列表及图片保存功能。

WebView中显示图片

在Android中使用WebView加载网页时,如果网页中有图片,则图片默认是不会展示出来的,需要通过设置WebViewClient的方法来实现,代码如下所示:

webView.setWebViewClient(new WebViewClient() {
    // 通过重写shouldOverrideUrlLoading方法来自定义图片展示
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if(url.endsWith(".jpg") || url.endsWith(".png") || url.endsWith(".jpeg")) {
            // 显示图片
            showImage(url);
            return true;
        }
        // 其他情况交给WebView处理
        view.loadUrl(url);
        return true;
    }
});

// 显示图片的方法
private void showImage(String url) {
    // 实现查看大图、保存图片等功能
    // ...
}

显示大图列表

在showImage方法中,我们可以通过自定义Dialog或PopupWindow等方式来显示大图列表,代码如下所示:

private void showImage(String url) {
    // 创建PopupWindow对象
    PopupWindow popupWindow = new PopupWindow(context);

    // 创建要显示的View
    View view = LayoutInflater.from(context).inflate(R.layout.popup_image_list, null);

    // 设置RecyclerView
    RecyclerView recyclerView = view.findViewById(R.id.recycler_view);
    LinearLayoutManager layoutManager = new LinearLayoutManager(context);
    layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
    recyclerView.setLayoutManager(layoutManager);
    ImageListAdapter adapter = new ImageListAdapter(imageUrls);
    recyclerView.setAdapter(adapter);

    // 设置PopupWindow参数
    popupWindow.setContentView(view);
    popupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
    popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
    popupWindow.setOutsideTouchable(true);
    popupWindow.setFocusable(true);
    popupWindow.showAtLocation(webView, Gravity.BOTTOM, 0, 0);
}

其中,popup_image_list.xml布局文件可以自定义,这里使用一个RecyclerView来展示大图列表,代码如下所示:

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:overScrollMode="never"
    android:background="@android:color/transparent"/>

图片保存功能

在显示大图列表的PopupWindow中,我们可以为每一张图片添加一个保存图片的按钮,点击按钮即可实现图片保存功能,代码如下所示:

private void showImage(String url) {
    ...
    ImageListAdapter adapter = new ImageListAdapter(imageUrls);
    adapter.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(View view, int position) {
            // 保存图片
            saveImage(imageUrls.get(position));
        }
    });
    recyclerView.setAdapter(adapter);
    ...
}

// 保存图片的方法
private void saveImage(String url) {
    Glide.with(context)
        .asBitmap()
        .load(url)
        .into(new SimpleTarget<Bitmap>() {
            @Override
            public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
                // 获取存储路径
                File targetFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath()
                    + File.separator
                    + "图片保存文件夹"
                    + File.separator
                    + System.currentTimeMillis()
                    + ".jpg");

                try {
                    // 创建文件夹
                    File dir = targetFile.getParentFile();
                    if(!dir.exists()) {
                        dir.mkdirs();
                    }
                    // 保存图片到本地
                    FileOutputStream fos = new FileOutputStream(targetFile);
                    resource.compress(Bitmap.CompressFormat.JPEG, 90, fos);
                    fos.flush();
                    fos.close();
                    // 通知相册更新
                    MediaScannerConnection.scanFile(context,
                        new String[]{ targetFile.getAbsolutePath() },
                        null,
                        new MediaScannerConnection.OnScanCompletedListener() {
                            @Override
                            public void onScanCompleted(String path, Uri uri) {
                                Toast.makeText(context, "图片已保存至相册", Toast.LENGTH_SHORT).show();
                            }
                        });
                } catch (Exception e) {
                    e.printStackTrace();
                    Toast.makeText(context, "图片保存失败", Toast.LENGTH_SHORT).show();
                }
            }
        });
}

在saveImage方法中,使用Glide库加载图片并将其转换为Bitmap格式,然后将其保存到指定目录下,同时通过MediaScannerConnection通知相册更新。

示例

下面是两个示例:

  1. 在WebView中点击图片,显示大图列表及图片保存功能:
webView.loadUrl("http://www.example.com");

webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if(url.endsWith(".jpg") || url.endsWith(".png") || url.endsWith(".jpeg")) {
            showImage(url);
            return true;
        }
        view.loadUrl(url);
        return true;
    }
});
  1. 在RecyclerView或ListView中点击图片,显示大图列表及图片保存功能:
// 在Adapter中为ImageView设置监听器,然后调用showImage方法
image.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        showImage(imageUrls);
    }
});

private void showImage(List<String> imageUrls) {
    // 创建PopupWindow对象
    PopupWindow popupWindow = new PopupWindow(context);

    // 创建要显示的View
    View view = LayoutInflater.from(context).inflate(R.layout.popup_image_list, null);

    // 设置RecyclerView
    RecyclerView recyclerView = view.findViewById(R.id.recycler_view);
    LinearLayoutManager layoutManager = new LinearLayoutManager(context);
    layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
    recyclerView.setLayoutManager(layoutManager);
    ImageListAdapter adapter = new ImageListAdapter(imageUrls);
    adapter.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(View view, int position) {
            saveImage(imageUrls.get(position));
        }
    });
    recyclerView.setAdapter(adapter);

    // 设置PopupWindow参数
    popupWindow.setContentView(view);
    popupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
    popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
    popupWindow.setOutsideTouchable(true);
    popupWindow.setFocusable(true);
    popupWindow.showAtLocation(recyclerView, Gravity.BOTTOM, 0, 0);
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android 实现WebView点击图片查看大图列表及图片保存功能 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript 开发工具webstrom使用指南

    JavaScript 开发工具webstrom使用指南 概述 WebStorm是一款由JetBrains公司开发的JavaScript集成开发工具(IDE),全称是WebStorm: The Smartest JavaScript IDE,该工具为开发JavaScript应用程序提供了丰富的工具和功能,如语法高亮、智能代码完成功能、代码导航、调试、版本控制等…

    JavaScript 2023年5月19日
    00
  • JavaScript Accessor实现说明

    JavaScript Accessor是一种用于获取或设置对象属性值的方法,这种方式可以让我们在获取或设置对象属性时执行额外的逻辑。 Accessor方法有两种:getter和setter。 Getter方法可以让我们获取对象的属性值,Setter方法可以让我们设置对象的属性值。 以下是实现JavaScript Accessor方法的步骤: 步骤1:定义一个…

    JavaScript 2023年6月10日
    00
  • 解析js中获得父窗口链接getParent方法以及各种打开窗口的方法

    解析js中获得父窗口链接getParent方法以及各种打开窗口的方法 在Web开发中,我们经常需要在网页中打开新的窗口,并且还会经常需要获取当前窗口的父窗口。本文将介绍如何使用JavaScript来获取父窗口的链接,并且介绍常用的打开窗口的方法。 获取父窗口链接 可以使用 JavaScript 中的 parent 对象来获取当前窗口的父窗口对象。父窗口对象包…

    JavaScript 2023年6月11日
    00
  • JS动态插入脚本和插入引用外部链接脚本的方法

    JS动态插入脚本和引用外部链接脚本是 Web 开发中常用的技术,可以使页面具有动态性和互动性。下面是详细的攻略。 动态插入脚本的方法 动态插入脚本可用于在 Web 页面中动态地加载并执行 JavaScript 代码。一般来说,动态插入脚本的步骤如下: 创建 script 标签并设置其 type 属性为 text/javascript。 将 JavaScrip…

    JavaScript 2023年5月27日
    00
  • Extjs表单输入框异步校验的插件实现方法

    下面是详细讲解“Extjs表单输入框异步校验的插件实现方法”的完整攻略。 什么是Extjs表单输入框异步校验的插件? 在使用Extjs框架编写表单时,常常需要对表单中的输入框进行校验,以保证用户输入的内容符合要求。而有些校验规则需要通过异步方式进行,比如从后台获取数据判断输入是否合法。这时就需要用到Extjs表单输入框异步校验的插件。 实现方法 具体实现方法…

    JavaScript 2023年6月10日
    00
  • 一个简易的js图片轮播效果

    下面是一个关于实现“一个简易的js图片轮播效果”的完整攻略: 确定需求 首先,我们需要明确实现一个简易的js图片轮播效果的需求。具体来说,它应该具有以下特点: 需要能够自动播放图片; 需要能够通过点击左右箭头手动切换图片,点击小圆点可以快速切换到相应的图片; 图片过渡效果需要流畅自然。 准备html结构 实现一个图片轮播的首要任务就是准备好html结构。我们…

    JavaScript 2023年6月11日
    00
  • 一篇文章带你详细了解JavaScript数组

    一篇文章带你详细了解JavaScript数组 JavaScript数组是一个强大的工具,可以用来存储和操作数据。本文将介绍JavaScript数组的基础知识,包括创建、访问和操作数组等方面。 创建数组 可以使用以下方法创建JavaScript数组: // 方法1:使用数组字面量 const arr1 = [1, 2, 3]; // 方法2:使用Array构造…

    JavaScript 2023年5月18日
    00
  • JS输出空格的简单实现方法

    要实现JS输出空格,有多种方法。下面我们介绍两种方法: 方法一:使用HTML中的空格符 HTML中的空格符,即&nbsp;,可以被JS读取并输出。使用这个符号,可以轻易地输出空格,如下所示: <!DOCTYPE html> <html> <head> <title>JS输出空格的方法示例</tit…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部