<!-- 授予该程序使用摄像头的权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
contentWebView.getSettings().setJavaScriptEnabled(true);//开启交互(必须加)
contentWebView.getSettings().setAppCacheEnabled(true);//开启缓存
contentWebView.getSettings().setDatabaseEnabled(true);//开启数据库
contentWebView.getSettings().setDomStorageEnabled(true);
String url = getHtmlData(artcircle.getContent());//格式化后的链接
contentWebView.loadDataWithBaseURL//加载网页格式的链接
(null, url, "text/html", "UTF-8", null);
// 加载普通链接 contentWebView.loadUrl("");
contentWebView.addJavascriptInterface(new JavascriptInterface(this), "imagelistner");//绑定javasrcipt接口,imagelistner为接口的别名
contentWebView.setWebViewClient(new WebViewClient() {//给网页设置监听
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//点击webView中的键接,依然在此webview中显示,而不跳转到别的浏览器
view.loadUrl(url);//在App内部加载网页
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
addImageListner(view);//添加需要监听的WebView内部的图片
super.onPageFinished(view, url);
//当页面加载完成,就调用我们的addImageListener()函数
}
});
}
}
private String getHtmlData(String bodyHTML) {
String head = "<head><style>img{max-width: 100%; width:auto; height: auto;}</style></head>";
return "<html>" + head + "<body>" + bodyHTML + "</body><html>";
}
private void addImageListner(WebView view) {
//遍历页面中所有img的节点,因为节点里面的图片的url即objs[i].src,保存所有图片的src.
//为每个图片设置点击事件,objs[i].onclick
view.loadUrl("javascript:(function(){" +//给监听设置图片的监听函数
"var objs = document.getElementsByTagName(\"img\"); " +
"for(var i=0;i<objs.length;i++) " +
"{" +
"window.imagelistner.readImageUrl(objs[i].src); " +
" objs[i].onclick=function() " +
" { " +
" window.imagelistner.openImage(this.src); " +
" } " +
"}" +
"})()");
}
@Override
protected void onDestroy() {
new Thread(new Runnable() {
@Override
public void run() {
Glide.get(YSQ_item_Activity.this).clearDiskCache();//清理磁盘缓存需要在子线程中执行
}
}).start();
Glide.get(this).clearMemory();//清理内存缓存可以在UI主线程中进行
super.onDestroy();
}
class JavascriptInterface {
private Context context;
public JavascriptInterface(Context context) {
this.context = context;
}
@android.webkit.JavascriptInterface
public void readImageUrl(String img) { //把所有图片的url保存在ArrayList<String>中
listimg.add(img);
}
@android.webkit.JavascriptInterface //对于targetSdkVersion>=17的,要加这个声明
public void openImage(String clickimg)//点击图片所调用到的函数
{
int index = 0;
for (String url : listimg) {
if (url.equals(clickimg)) {
index = listimg.indexOf(clickimg);//获取点击图片在整个页面图片中的位置
}
}
Intent intent = new Intent();
EventBus.getDefault().postSticky(listimg);//EventBut发送粘性数据全局监听
intent.putExtra("index", index);//把当前索引也穿过去
//将所有图片的url以及点击图片的位置作为参数传给启动的activity
intent.setClass(context, PhotoActivity.class);
context.startActivity(intent);//启动ViewPagerActivity,用于显示图片
}
}
public class PhotoActivity extends AppCompatActivity {
@BindView(R.id.vpr)
ViewPager vpr;
private ArrayList<View> views;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_photo);
ButterKnife.bind(this);
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
}
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void getData(final List<String> list) {
int id = getIntent().getIntExtra("index", 0);
views = new ArrayList<>();
for (String s : list) {
PhotoView photoView = new PhotoView(this);
photoView.enable();
photoView.setScaleType(ImageView.ScaleType.FIT_CENTER);
Glide.with(this).load(s).error(R.mipmap.ic_camera).into(photoView);
views.add(photoView);
}
vpr.setAdapter(new PagerAdapter() {
@Override
public int getCount() {
return list.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@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) {
container.removeView(views.get(position));
}
});
vpr.setCurrentItem(id);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
}
}