android 获取webview中所有的图片

webView.addJavascriptInterface(new MJavascriptInterface(this), "imagelistener");

webView.setWebViewClient(new WebViewClient(){

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        return super.shouldOverrideUrlLoading(view, url);
    }

    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        handler.proceed();
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);

        webView.loadUrl("javascript:(function(){" +
                "var objs = document.getElementsByTagName(\"img\"); " +
                " var array=new Array(); " +
                " for(var j=0;j<objs.length;j++){ array[j]=objs[j].src; }"+
                "for(var i=0;i<objs.length;i++)  " +
                "{"
                + "    objs[i].οnclick=function()  " +
                "    {  "
                + "        window.imagelistener.openImage(this.src,array);  " +
                "    }  " +
                "}" +
                "})()");
    }
});

public class MJavascriptInterface {

    private Activity activity;
    private List<String> list_imgs = new ArrayList<>();
    private int index = 0;

    public MJavascriptInterface(Activity activity){

        this.activity = activity;
    }

    @JavascriptInterface
    public void openImage(String img, String[] imgs) {

        list_imgs.clear();

        for (int i = 0; i < imgs.length; i++) {

            if (imgs[i].equals(img)){

                index = i;
            }

            list_imgs.add(imgs[i]);
        }

        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {

                ScaleImageView scaleImageView = new ScaleImageView(activity);

                scaleImageView.setUrls(list_imgs,index);

                scaleImageView.create();
            }
        });
    }
}
 

/**
 * Created by Hang.Yang on 2018/5/14 14:34.
 * If you find a path with no obstacles, it probably doesn’t lead anywhere.
 * In LongCaiHaErBin
 */

public class ScaleImageView {

    private static final byte URLS = 0;
    private static final byte FILES = 1;
    private byte status;

    private Activity activity;

    private List<String> urls;
    private List<File> files;
    private List<File> downloadFiles;
    private List<Bitmap> list_bitmap;

    private int selectedPosition;

    private Dialog dialog;

    private ImageView delete;
    private ImageView download;
    private TextView imageCount;
    private ViewPager viewPager;

    private List<View> views;
    private MyPagerAdapter adapter;

    private OnDeleteItemListener listener;
    private int startPosition;

    public ScaleImageView(Activity activity) {
        this.activity = activity;
        init();
    }

    public void setUrls(List<String> urls, int startPosition) {
        if (this.urls == null) {
            this.urls = new ArrayList<>();
        } else {
            this.urls.clear();
        }
        this.urls.addAll(urls);
        status = URLS;
//        delete.setVisibility(View.GONE);
        /*if (downloadFiles == null) {
            downloadFiles = new ArrayList<>();
        } else {
            downloadFiles.clear();
        }*/
        if (list_bitmap == null){

            list_bitmap = new ArrayList<>();
        }else {

            list_bitmap.clear();
        }
        this.startPosition = startPosition++;
        String text = startPosition + "/" + urls.size();
        imageCount.setText(text);
    }

    public void setFiles(List<File> files, int startPosition) {
        if (this.files == null) {
            this.files = new LinkedList<>();
        } else {
            this.files.clear();
        }
        this.files.addAll(files);
        status = FILES;
        download.setVisibility(View.GONE);
        this.startPosition = startPosition++;
        String text = startPosition + "/" + files.size();
        imageCount.setText(text);
    }

    public void setOnDeleteItemListener(OnDeleteItemListener listener) {
        this.listener = listener;
    }

    private void init() {
        RelativeLayout relativeLayout = (RelativeLayout) activity.getLayoutInflater().inflate(R.layout.dialog_scale_image, null);
//        ImageView close = (ImageView) relativeLayout.findViewById(R.id.scale_image_close);
//        delete = (ImageView) relativeLayout.findViewById(R.id.scale_image_delete);
        download = (ImageView) relativeLayout.findViewById(R.id.scale_image_save);
        imageCount = (TextView) relativeLayout.findViewById(R.id.scale_image_count);
        viewPager = (ViewPager) relativeLayout.findViewById(R.id.scale_image_view_pager);
        dialog = new Dialog(activity, R.style.Dialog_Fullscreen);
        dialog.setContentView(relativeLayout);
//        close.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//
//                dialog.dismiss();
//            }
//        });
//
//        delete.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//
//                int size = views.size();
//                files.remove(selectedPosition);
//                if (listener != null) {
//                    listener.onDelete(selectedPosition);
//                }
//                viewPager.removeView(views.remove(selectedPosition));
//                if (selectedPosition != size) {
//                    int position = selectedPosition + 1;
//                    String text = position + "/" + views.size();
//                    imageCount.setText(text);
//                }
//                adapter.notifyDataSetChanged();
//            }
//        });

        download.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                SaveImageToGallery.saveImageToGallery(list_bitmap.get(selectedPosition));

//                SaveImageToGallery.saveImageToGallery(BitmapFactory.decodeFile(downloadFiles.get(selectedPosition).getPath()));
            }
        });

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                selectedPosition = position;
                String text = ++position + "/" + views.size();
                imageCount.setText(text);
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    public void create() {
        dialog.show();
        views = new ArrayList<>();
        adapter = new MyPagerAdapter(views, dialog);
        if (status == URLS) {
            for (final String url : urls) {
                FrameLayout frameLayout = (FrameLayout) activity.getLayoutInflater().inflate(R.layout.view_scale_image, null);
                final PhotoView imageView = (PhotoView) frameLayout.findViewById(R.id.img_pic);
                imageView.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {
                    @Override
                    public void onPhotoTap(View view, float x, float y) {

                        dialog.dismiss();
                    }
                });
                views.add(frameLayout);
                IOThread.getSingleThread().execute(new Runnable() {
                    @Override
                    public void run() {

                        /*File downLoadFile;

                        try {

                            downLoadFile = Glide.with(activity).load(url).downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get();
                            downloadFiles.add(downLoadFile);

                        } catch (Exception e) {
                            e.printStackTrace();
                        }*/

                        activity.runOnUiThread(new Runnable() {
                            @Override
                            public void run() {

                                imageView.setImageResource(R.mipmap.placeholder_figure);

                                Glide.with(activity)
                                        .load(url)
                                        .asBitmap()
                                        .into(new SimpleTarget<Bitmap>() {
                                            @Override
                                            public void onResourceReady(Bitmap bitmap, GlideAnimation<? super Bitmap> glideAnimation) {

                                                if (bitmap != null || !bitmap.isRecycled()){

                                                    list_bitmap.add(bitmap);
                                                }

                                                imageView.setImageBitmap(bitmap);
                                            }
                                        });

//                                GlideLoader.getInstance().get(url,imageView);
                            }
                        });
                    }
                });
            }
            viewPager.setAdapter(adapter);
        } else if (status == FILES) {
            for (File file : files) {
                FrameLayout frameLayout = (FrameLayout) activity.getLayoutInflater().inflate(R.layout.view_scale_image, null);
                PhotoView imageView = (PhotoView) frameLayout.findViewById(R.id.img_pic);
                views.add(frameLayout);
                imageView.setImageBitmap(BitmapFactory.decodeFile(file.getPath()));
            }
            viewPager.setAdapter(adapter);
        }
        viewPager.setCurrentItem(startPosition);
    }

    private static class MyPagerAdapter extends PagerAdapter {

        private List<View> views;
        private Dialog dialog;

        MyPagerAdapter(List<View> views, Dialog dialog) {
            this.views = views;
            this.dialog = dialog;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            container.addView(views.get(position));
            return views.get(position);
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            if (position == 0 && views.size() == 0) {
                dialog.dismiss();
                return;
            }
            if (position == views.size()) {
                container.removeView(views.get(--position));
            } else {
                container.removeView(views.get(position));
            }
        }

        @Override
        public int getCount() {
            return views.size();
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public int getItemPosition(Object object) {
            return POSITION_NONE;
        }

    }

    public interface OnDeleteItemListener {
        void onDelete(int position);
    }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值