webview加载html 点击图片放大查看

 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].onclick=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);
    }
}

 

posted on 2016-10-25 19:15  glj521  阅读(1452)  评论(0编辑  收藏  举报