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);
}
}