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].onclick=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) { Log.e("--main--",""); 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); } }
文章来源: android 获取webview中所有的图片