WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); webView.setWebViewClient(new MyWebViewClient()); settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); settings.setSupportZoom(false);// 用于设置webview放大 settings.setBuiltInZoomControls(false); webView.addJavascriptInterface(new JavascriptInterface(getApplicationContext()),"imagelistner");
// 注入js函数监听 private void addImageClickListner() { Log.d(TAG, "addImageClickListner: 注入代码"); // 这段js函数的功能就是,遍历所有的img几点,并添加onclick函数,在还是执行的时候调用本地接口传递url过去 webView.loadUrl("javascript:(function(){" + "var objs = document.getElementsByTagName(\"img\");" + "var imgurl=''; " + "for(var i=0;i<objs.length;i++) " + "{" + "imgurl+=objs[i].src+',';" + " objs[i].οnclick=function() " + " { " + " imagelistner.openImage(imgurl); " + " } " + "}" + "})()"); } // js通信接口 public class JavascriptInterface { private Context context; public JavascriptInterface(Context context) { this.context = context; } @android.webkit.JavascriptInterface //注解 很重要,必不可少 public void openImage(String img) { System.out.println(img); Log.d(TAG, "openImage-------------------------: "+img); String[] imgs = img.split(","); ArrayList<String> imgsUrl = new ArrayList<String>(); for (String s : imgs) { imgsUrl.add(s); Log.d(TAG, "openImage-------------------------: "+s); } Intent intent = new Intent(); intent.putStringArrayListExtra("infos", imgsUrl); intent.setClass(context, ImageShowActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } } // 监听 private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return super.shouldOverrideUrlLoading(view, url); } @Override public void onPageFinished(WebView view, String url) { view.getSettings().setJavaScriptEnabled(true); super.onPageFinished(view, url); // html加载完成之后,添加监听图片的点击js函数 addImageClickListner(); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { view.getSettings().setJavaScriptEnabled(true); Log.d(TAG, "addImageClickListner: 开始加载"); super.onPageStarted(view, url, favicon); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); } }
activity的布局文件 ----> layout/details_imageshow.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/full_image_root" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/bg_full_image" > <android.support.v4.view.ViewPager android:id="@+id/image_pager" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <ImageView android:id="@+id/download" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="15.0dip" android:layout_marginRight="15.0dip" android:src="@drawable/ic_download" /> <TextView android:id="@+id/page_number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@id/download" android:layout_marginLeft="15.0dip" android:textColor="#ffeeeeee" android:textSize="12.0sp" /> </RelativeLayout>
package com.uctimes.jike.main.news; import java.util.ArrayList; import android.app.Activity; import android.graphics.Bitmap; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.uctimes.jike.AppManager; import com.uctimes.jike.BaseApplication; import com.uctimes.jike.R; import com.uctimes.jike.adapter.ImagePagerAdapter; import com.uctimes.jike.util.SaveImageUtils; import com.uctimes.jike.view.imageshow.ImageShowViewPager; //import com.topnews.adapter.ImagePagerAdapter; //import com.topnews.base.BaseActivity; //import com.topnews.view.imageshow.ImageShowViewPager; /* * ͼƬչʾ */ public class ImageShowActivity extends Activity { /** ͼƬչʾ */ private ViewPager image_pager; private TextView page_number; /** ͼƬЂдť */ private ImageView download; /** ͼƬҭ */ private ArrayList<String> imgsUrl; /** PagerAdapter */ private ImagePagerAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.details_imageshow); initView(); initData(); initViewPager(); } private void initData() { imgsUrl = getIntent().getStringArrayListExtra("infos"); Log.d("ImageShowActivity", "initData-----------------: "+imgsUrl); page_number.setText("1" + "/" + imgsUrl.size()); } private void initView() { image_pager = (ViewPager) findViewById(R.id.image_pager); page_number = (TextView) findViewById(R.id.page_number); download = (ImageView) findViewById(R.id.download); download.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { { if(imgsUrl!=null){ final int currentItem = image_pager.getCurrentItem(); new Thread(new Runnable() { @Override public void run() { try { final Bitmap myBitmap = Glide.with(BaseApplication.getmApplication()) .load(imgsUrl.get(currentItem)) .asBitmap() //必须 .centerCrop() .into(500, 500) .get() ; Log.d("sevaImage", "onClick: "+myBitmap.getByteCount()); runOnUiThread(new Runnable() { @Override public void run() { SaveImageUtils.saveImageToGallerys(ImageShowActivity.this,myBitmap); } }); } catch (Exception e) { e.printStackTrace(); } } }).start(); } } } }); image_pager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { page_number.setText((arg0 + 1) + "/" + imgsUrl.size()); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } }); } private void initViewPager() { if (imgsUrl != null && imgsUrl.size() != 0) { mAdapter = new ImagePagerAdapter(getApplicationContext(), imgsUrl); image_pager.setAdapter(mAdapter); } } }
adapter的条目布局 ----> layout/details_imageshow_item.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/full_image_root" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/bg_full_image" > <ImageView android:id="@+id/full_image" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="fitCenter" /> <TextView android:id="@+id/progress_text" style="@style/full_image_progress_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> <ProgressBar android:id="@+id/progress" android:visibility="gone" style="@style/full_image_progressbar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> <TextView android:id="@+id/retry" android:visibility="gone" style="@style/full_image_retry_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:drawableTop="@drawable/default_pic" android:gravity="center" android:text="@string/retry_large_image" /> </RelativeLayout>
适配器 -----> ImagePagerAdapter
package com.uctimes.jike.adapter; import java.util.ArrayList; //import com.topnews.view.imageshow.TouchImageView; //import com.nostra13.universalimageloader.core.DisplayImageOptions; //import com.nostra13.universalimageloader.core.ImageLoader; //import com.nostra13.universalimageloader.core.assist.FailReason; //import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; //import com.topnews.R; //import com.topnews.tool.Options; //import com.topnews.view.imageshow.ImageShowViewPager; import android.content.Context; import android.graphics.Bitmap; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; import com.uctimes.jike.R; import com.uctimes.jike.util.FrescoUtils; import com.uctimes.jike.util.GlideUtils; import com.uctimes.jike.view.imageshow.ImageShowViewPager; import com.uctimes.jike.view.imageshow.TouchImageView; /** * 图片浏览的PagerAdapter */ public class ImagePagerAdapter extends PagerAdapter { Context context; ArrayList<String> imgsUrl; LayoutInflater inflater = null; // protected ImageLoader imageLoader = ImageLoader.getInstance(); // DisplayImageOptions options; //view内控件 // TouchImageView full_image; ImageView full_image; TextView progress_text; ProgressBar progress; TextView retry; public ImagePagerAdapter(Context context, ArrayList<String> imgsUrl) { this.context = context; this.imgsUrl = imgsUrl; inflater = LayoutInflater.from(context); // options = Options.getListOptions(); } /** 动态加载数据 */ @Override public void setPrimaryItem(ViewGroup container, int position, Object object) { super.setPrimaryItem(container, position, object); // ((ImageShowViewPager) container).mCurrentView = ((TouchImageView) ((View)object).findViewById(R.id.full_image)); } @Override public int getCount() { return imgsUrl == null ? 0 : imgsUrl.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public int getItemPosition(Object object) { // TODO Auto-generated method stub return super.getItemPosition(object); } @Override public Object instantiateItem(ViewGroup container, int position) { View view = inflater.from(context).inflate(R.layout.details_imageshow_item, null); // full_image = (TouchImageView)view.findViewById(R.id.full_image); full_image = (ImageView)view.findViewById(R.id.full_image); progress_text= (TextView)view.findViewById(R.id.progress_text); progress= (ProgressBar)view.findViewById(R.id.progress); retry= (TextView)view.findViewById(R.id.retry);//加载失败 // progress_text.setText(String.valueOf(position)); GlideUtils.setImageByGlide(full_image,progress,imgsUrl.get(position));//自己整个图片加载框架 // FrescoUtils.setImageByFresco(full_image,imgsUrl.get(position)); // imageLoader.displayImage(imgsUrl.get(position), full_image, options,new ImageLoadingListener() { // // @Override // public void onLoadingStarted(String imageUri, View view) { // // TODO Auto-generated method stub // progress.setVisibility(View.VISIBLE); // progress_text.setVisibility(View.VISIBLE); // full_image.setVisibility(View.GONE); // retry.setVisibility(View.GONE); // } // // @Override // public void onLoadingFailed(String imageUri, View view, // FailReason failReason) { // // TODO Auto-generated method stub // progress.setVisibility(View.GONE); // progress_text.setVisibility(View.GONE); // full_image.setVisibility(View.GONE); // retry.setVisibility(View.VISIBLE); // } // // @Override // public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { // progress.setVisibility(View.GONE); // progress_text.setVisibility(View.GONE); // full_image.setVisibility(View.VISIBLE); // retry.setVisibility(View.GONE); // } // // @Override // public void onLoadingCancelled(String imageUri, View view) { // progress.setVisibility(View.GONE); // progress_text.setVisibility(View.GONE); // full_image.setVisibility(View.GONE); // retry.setVisibility(View.VISIBLE); // } // }); ((ViewPager) container).addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager) container).removeView((View) object); } }