package org.qii.weiciyuan.support.gallery;
import org.qii.weiciyuan.R;
import org.qii.weiciyuan.support.settinghelper.SettingUtility;
import org.qii.weiciyuan.support.utils.Utility;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v4.app.Fragment;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import java.io.File;
/**
* User: qii
* Date: 14-4-30
*/
public class LargePictureFragment extends Fragment {
private static final int NAVIGATION_BAR_HEIGHT_DP_UNIT = 48;
public static LargePictureFragment newInstance(String path, boolean animationIn) {
LargePictureFragment fragment = new LargePictureFragment();
Bundle bundle = new Bundle();
bundle.putString("path", path);
bundle.putBoolean("animationIn", animationIn);
fragment.setArguments(bundle);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.gallery_large_layout, container, false);
final WebView large = (WebView) view.findViewById(R.id.large);
large.setBackgroundColor(getResources().getColor(R.color.transparent));
large.setVisibility(View.INVISIBLE);
large.setOverScrollMode(View.OVER_SCROLL_NEVER);
if (SettingUtility.allowClickToCloseGallery()) {
large.setOnTouchListener(new LargeOnTouchListener(large));
}
LongClickListener longClickListener = ((ContainerFragment) getParentFragment())
.getLongClickListener();
large.setOnLongClickListener(longClickListener);
final String path = getArguments().getString("path");
large.getSettings().setJavaScriptEnabled(true);
large.getSettings().setUseWideViewPort(true);
large.getSettings().setLoadWithOverviewMode(true);
large.getSettings().setBuiltInZoomControls(true);
large.getSettings().setDisplayZoomControls(false);
large.setVerticalScrollBarEnabled(false);
large.setHorizontalScrollBarEnabled(false);
large.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
boolean animateIn = getArguments().getBoolean("animationIn");
if (animateIn) {
showContent(path, large);
} else {
/**
* webview will influence other imageview animation performance
*/
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
showContent(path, large);
}
}, GeneralPictureFragment.ANIMATION_DURATION + 300);
}
return view;
}
private void showContent(String path, WebView large) {
File file = new File(path);
String str1 = "file://" + file.getAbsolutePath()
.replace("/mnt/sdcard/", "/sdcard/");
String str2 =
"<html>\n<head>\n <style>\n html,body{background:transparent;margin:0;padding:0;} *{-webkit-tap-highlight-color:rgba(0, 0, 0, 0);}\n </style>\n <script type=\"text/javascript\">\n var imgUrl = \""
+ str1 + "\";" + " var objImage = new Image();\n"
+ " var realWidth = 0;\n" + " var realHeight = 0;\n" + "\n"
+ " function onLoad() {\n"
+ " objImage.onload = function() {\n"
+ " realWidth = objImage.width;\n"
+ " realHeight = objImage.height;\n" + "\n"
+ " document.gagImg.src = imgUrl;\n"
+ " onResize();\n" + " }\n"
+ " objImage.src = imgUrl;\n" + " }\n" + "\n"
+ " function onResize() {\n" + " var scale = 1;\n"
+ " var newWidth = document.gagImg.width;\n"
+ " if (realWidth > newWidth) {\n"
+ " scale = realWidth / newWidth;\n"
+ " } else {\n"
+ " scale = newWidth / realWidth;\n" + " }\n"
+ "\n"
+ " hiddenHeight = Math.ceil(30 * scale);\n"
+ " document.getElementById('hiddenBar').style.height = hiddenHeight + \"px\";\n"
+ " document.getElementById('hiddenBar').style.marginTop = -hiddenHeight + \"px\";\n"
+ " }\n" + " </script>\n" + "</head>\n"
+ "<body onload=\"onLoad()\" onresize=\"onResize()\" onclick=\"Android.toggleOverlayDisplay();\">\n"
+ " <table style=\"width: 100%;height:100%;\">\n"
+ " <tr style=\"width: 100%;\">\n"
+ " <td valign=\"middle\" align=\"center\" style=\"width: 100%;\">\n"
+ " <div style=\"display:block\">\n"
+ " <img name=\"gagImg\" src=\"\" width=\"100%\" style=\"\" />\n"
+ " </div>\n"
+ " <div id=\"hiddenBar\" style=\"position:absolute; width: 100%; background: transparent;\"></div>\n"
+ " </td>\n" + " </tr>\n" + " </table>\n"
+ "</body>\n" + "</html>";
large.loadDataWithBaseURL("file:///android_asset/", str2, "text/html", "utf-8",
null);
large.setVisibility(View.VISIBLE);
}
private class LargeOnTouchListener implements View.OnTouchListener {
GestureDetector gestureDetector;
public LargeOnTouchListener(final View view) {
gestureDetector = new GestureDetector(view.getContext(),
new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
Utility.playClickSound(view);
getActivity().onBackPressed();
return true;
}
});
}
@Override
public boolean onTouch(View v, MotionEvent event) {
gestureDetector.onTouchEvent(event);
return false;
}
}
}