bin / mupdf / mupdf-1.7 / platform / android / src / com / artifex / mupdfdemo / MuPDFReflowView.java
7859 viewspackage com.artifex.mupdfdemo;12import android.content.Context;3import android.graphics.Point;4import android.graphics.PointF;5import android.graphics.RectF;6import android.os.Handler;7import android.util.Base64;8import android.view.MotionEvent;9import android.view.View;10import android.webkit.WebView;11import android.webkit.WebViewClient;1213public class MuPDFReflowView extends WebView implements MuPDFView {14private final MuPDFCore mCore;15private final Handler mHandler;16private final Point mParentSize;17private int mPage;18private float mScale;19private int mContentHeight;20AsyncTask<Void,Void,byte[]> mLoadHTML;2122public MuPDFReflowView(Context c, MuPDFCore core, Point parentSize) {23super(c);24mHandler = new Handler();25mCore = core;26mParentSize = parentSize;27mScale = 1.0f;28mContentHeight = parentSize.y;29getSettings().setJavaScriptEnabled(true);30addJavascriptInterface(new Object(){31public void reportContentHeight(String value) {32mContentHeight = (int)Float.parseFloat(value);33mHandler.post(new Runnable() {34public void run() {35requestLayout();36}37});38}39}, "HTMLOUT");40setWebViewClient(new WebViewClient() {41@Override42public void onPageFinished(WebView view, String url) {43setScale(mScale);44}45});46}4748private void requestHeight() {49// Get the webview to report the content height via the interface setup50// above. Workaround for getContentHeight not working51loadUrl("javascript:elem=document.getElementById('content');window.HTMLOUT.reportContentHeight("+mParentSize.x+"*elem.offsetHeight/elem.offsetWidth)");52}5354public void setPage(int page, PointF size) {55mPage = page;56if (mLoadHTML != null) {57mLoadHTML.cancel(true);58}59mLoadHTML = new AsyncTask<Void,Void,byte[]>() {60@Override61protected byte[] doInBackground(Void... params) {62return mCore.html(mPage);63}64@Override65protected void onPostExecute(byte[] result) {66String b64 = Base64.encodeToString(result, Base64.DEFAULT);67loadData(b64, "text/html; charset=utf-8", "base64");68}69};70mLoadHTML.execute();71}7273public int getPage() {74return mPage;75}7677public void setScale(float scale) {78mScale = scale;79loadUrl("javascript:document.getElementById('content').style.zoom=\""+(int)(mScale*100)+"%\"");80requestHeight();81}8283public void blank(int page) {84}8586public Hit passClickEvent(float x, float y) {87return Hit.Nothing;88}8990public LinkInfo hitLink(float x, float y) {91return null;92}9394public void selectText(float x0, float y0, float x1, float y1) {95}9697public void deselectText() {98}99100public boolean copySelection() {101return false;102}103104public boolean markupSelection(Annotation.Type type) {105return false;106}107108public void startDraw(float x, float y) {109}110111public void continueDraw(float x, float y) {112}113114public void cancelDraw() {115}116117public boolean saveDraw() {118return false;119}120121public void setSearchBoxes(RectF[] searchBoxes) {122}123124public void setLinkHighlighting(boolean f) {125}126127public void deleteSelectedAnnotation() {128}129130public void deselectAnnotation() {131}132133public void setChangeReporter(Runnable reporter) {134}135136public void update() {137}138139public void updateHq(boolean update) {140}141142public void removeHq() {143}144145public void releaseResources() {146if (mLoadHTML != null) {147mLoadHTML.cancel(true);148mLoadHTML = null;149}150}151152public void releaseBitmaps() {153}154155@Override156protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {157int x, y;158switch(View.MeasureSpec.getMode(widthMeasureSpec)) {159case View.MeasureSpec.UNSPECIFIED:160x = mParentSize.x;161break;162default:163x = View.MeasureSpec.getSize(widthMeasureSpec);164}165switch(View.MeasureSpec.getMode(heightMeasureSpec)) {166case View.MeasureSpec.UNSPECIFIED:167y = mContentHeight;168break;169default:170y = View.MeasureSpec.getSize(heightMeasureSpec);171}172173setMeasuredDimension(x, y);174}175176@Override177public boolean onTouchEvent(MotionEvent ev) {178// TODO Auto-generated method stub179return false;180}181}182183184