123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- package com.poqop.document;
- import android.app.Activity;
- import android.app.Dialog;
- import android.content.SharedPreferences;
- import android.os.Bundle;
- import android.view.Gravity;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.Window;
- import android.view.animation.AccelerateInterpolator;
- import android.view.animation.Animation;
- import android.view.animation.AnimationSet;
- import android.view.animation.ScaleAnimation;
- import android.widget.FrameLayout;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.LinearLayout.LayoutParams;
- import android.widget.Toast;
- import com.poqop.R;
- import com.poqop.document.events.CurrentPageListener;
- import com.poqop.document.events.DecodingProgressListener;
- import com.poqop.document.models.CurrentPageModel;
- import com.poqop.document.models.DecodingProgressModel;
- import com.poqop.document.models.ZoomModel;
- import com.poqop.document.views.PageViewZoomControls;
- public abstract class BaseViewerActivity extends Activity implements DecodingProgressListener, CurrentPageListener
- {
- private static final int MENU_EXIT = 0;
- private static final int MENU_GOTO = 1;
- private static final int DIALOG_GOTO = 0;
- private static final String DOCUMENT_VIEW_STATE_PREFERENCES = "DjvuDocumentViewState";
- private DecodeService decodeService;
- private DocumentView documentView;
- private ViewerPreferences viewerPreferences;
- private Toast pageNumberToast;
- private CurrentPageModel currentPageModel;
- private static final int MAX_VALUE = 3800; //设置放大的最大倍数
- private static final float MULTIPLIER = 400.0f;
- public ZoomModel zoomModel;
-
- float lastX;
- float lastY;
- float magnify=1.0f; //放大
- float reduce=1.0f; //缩小
- LinearLayout zoom; //自定义一个linearlayout用来存放两个缩放按钮
-
- /**
- * Called when the activity is first created.
- */
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- initDecodeService();
- final ZoomModel zoomModel = new ZoomModel();
- final DecodingProgressModel progressModel = new DecodingProgressModel();
- progressModel.addEventListener(this);
- currentPageModel = new CurrentPageModel();
- currentPageModel.addEventListener(this);
- documentView = new DocumentView(this, zoomModel, progressModel, currentPageModel);
- zoomModel.addEventListener(documentView);
- documentView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
- decodeService.setContentResolver(getContentResolver());
- decodeService.setContainerView(documentView);
- documentView.setDecodeService(decodeService);
- decodeService.open(getIntent().getData());
- this.zoomModel = zoomModel;
- ImageView zoomIn,zoomOut;
- viewerPreferences = new ViewerPreferences(this);
-
- /*
- * 放大按鈕圖片進行放大
- */
- zoom=new LinearLayout(this);
- zoom.setVisibility(View.GONE);
- zoom.setOrientation(LinearLayout.HORIZONTAL);
-
- zoom.setLayoutParams(new LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
- LinearLayout.LayoutParams.WRAP_CONTENT));
-
- /*
- * 縮小按鈕圖片進行縮小
- */
- zoomOut=new ImageView(this);
- zoomOut.setImageResource(R.drawable.gallery_zoom_out_touch);
- zoomOut.setLayoutParams(new LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
- LinearLayout.LayoutParams.WRAP_CONTENT));
- zoomOut.setOnTouchListener(new View.OnTouchListener() {
- public boolean onTouch(View v, MotionEvent event) {
- System.out.println("寬"+zoom.getWidth());
- System.out.println("高:"+zoom.getHeight());
- switch (event.getAction() & MotionEvent.ACTION_MASK) {
- case MotionEvent.ACTION_DOWN:
- lastX = event.getX();
- setCurrentValue(getToureduceCurrentValues() - (event.getX() - lastX));
- break;
- }
- return true;
- }
- });
- zoomIn=new ImageView(this);
- zoomIn.setImageResource(R.drawable.gallery_zoom_in_touch);
- zoomIn.setOnTouchListener(new View.OnTouchListener() {
- public boolean onTouch(View v, MotionEvent event) {
- switch (event.getAction() & MotionEvent.ACTION_MASK) {
- case MotionEvent.ACTION_DOWN:
- lastX = event.getX();
- setCurrentValue(getToumagnifyCurrentValues() - (event.getX() - lastX));
- break;
- }
- return true;
- }
- });
- zoom.addView(zoomOut); //将两个按钮添加到一个小布局中
- zoom.addView(zoomIn);
-
- final FrameLayout frameLayout = createMainContainer();
- frameLayout.addView(documentView);
- frameLayout.addView(zoom); //將两个按钮添加到总布局中去
- frameLayout.addView(createZoomControls(zoomModel));
- setFullScreen();
- setContentView(frameLayout);
- final SharedPreferences sharedPreferences = getSharedPreferences(DOCUMENT_VIEW_STATE_PREFERENCES, 0);
- documentView.goToPage(sharedPreferences.getInt(getIntent().getData().toString(), 0));
- documentView.showDocument();
- documentView.setOnClickListener(new View.OnClickListener() {
-
- public void onClick(View v) {
- zoom.setVisibility(View.VISIBLE);
- }
- });
-
- viewerPreferences.addRecent(getIntent().getData());
- }
-
-
-
- // 放大
- public float getToumagnifyCurrentValues() {
- float mv = (zoomModel.getZoom() - 0.5f) * 400;
- return mv;
- }
-
- // 缩小
- public float getToureduceCurrentValues() {
- float mv = (zoomModel.getZoom() - 1.0f) * 200;
- return mv;
- }
-
-
- public void setCurrentValue(float currentValue) {
- if (currentValue < 0.0)
- currentValue = 0.0f;
- if (currentValue > MAX_VALUE)
- currentValue = MAX_VALUE;
- final float zoom = 1.0f + currentValue / MULTIPLIER;
- zoomModel.setZoom(zoom);
- }
-
- public void decodingProgressChanged(final int currentlyDecoding)
- {
- runOnUiThread(new Runnable()
- {
- public void run()
- {
- getWindow().setFeatureInt(Window.FEATURE_INDETERMINATE_PROGRESS, currentlyDecoding == 0 ? 10000 : currentlyDecoding);
- }
- });
- }
- public void currentPageChanged(int pageIndex)
- {
- final String pageText = (pageIndex + 1) + "/" + decodeService.getPageCount();
- if (pageNumberToast != null)
- {
- pageNumberToast.setText(pageText);
- }
- else
- {
- pageNumberToast = Toast.makeText(this, pageText, 300);
- }
- pageNumberToast.setGravity(Gravity.TOP | Gravity.LEFT,0,0);
- pageNumberToast.show();
- saveCurrentPage();
- }
- private void setWindowTitle()
- {
- final String name = getIntent().getData().getLastPathSegment();
- getWindow().setTitle(name);
- }
- @Override
- protected void onPostCreate(Bundle savedInstanceState)
- {
- super.onPostCreate(savedInstanceState);
- setWindowTitle();
- }
- /*
- * 设置全屏
- */
- private void setFullScreen()
- {
- if (viewerPreferences.isFullScreen())
- {
- // getWindow().requestFeature(Window.FEATURE_NO_TITLE);
- // getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
- }
- else
- {
- getWindow().requestFeature(Window.FEATURE_INDETERMINATE_PROGRESS); //在标题栏上加入更新进度条
- }
- }
- /*
- * 设置缩放栏的位置
- */
- private PageViewZoomControls createZoomControls(ZoomModel zoomModel)
- {
- final PageViewZoomControls controls = new PageViewZoomControls(this, zoomModel);
- controls.setGravity(Gravity.RIGHT | Gravity.BOTTOM);
- zoomModel.addEventListener(controls);
- return controls;
- }
- private FrameLayout createMainContainer()
- {
- return new FrameLayout(this);
- }
- private void initDecodeService()
- {
- if (decodeService == null)
- {
- decodeService = createDecodeService();
- }
- }
- protected abstract DecodeService createDecodeService();
- @Override
- protected void onStop()
- {
- super.onStop();
- }
- @Override
- protected void onDestroy() {
- decodeService.recycle();
- decodeService = null;
- super.onDestroy();
- }
- private void saveCurrentPage()
- {
- final SharedPreferences sharedPreferences = getSharedPreferences(DOCUMENT_VIEW_STATE_PREFERENCES, 0);
- final SharedPreferences.Editor editor = sharedPreferences.edit();
- editor.putInt(getIntent().getData().toString(), documentView.getCurrentPage());
- editor.commit();
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu)
- {
- menu.add(0, MENU_EXIT, 0, "退出");
- menu.add(0, MENU_GOTO, 0, "跳转");
- // final MenuItem menuItem = menu.add(0, MENU_FULL_SCREEN, 0, "Full screen").setCheckable(true).setChecked(viewerPreferences.isFullScreen());
- // setFullScreenMenuItemText(menuItem);
- return true;
- }
- private void setFullScreenMenuItemText(MenuItem menuItem)
- {
- menuItem.setTitle("Full screen " + (menuItem.isChecked() ? "on" : "off"));
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item)
- {
- switch (item.getItemId())
- {
- case MENU_EXIT:
- System.exit(0);
- return true;
- case MENU_GOTO:
- showDialog(DIALOG_GOTO);
- return true;
- }
- return false;
- }
- @Override
- protected Dialog onCreateDialog(int id)
- {
- switch (id)
- {
- case DIALOG_GOTO:
- return new GoToPageDialog(this, documentView, decodeService);
- }
- return null;
- }
- }
|