Commit 53d03926 authored by wanglei's avatar wanglei

...

parent 7096a17f
/*
* 文件名称: PGEventManage.java
*
*
* 编译器: android2.2
* 时间: 下午7:00:11
*/
......@@ -9,7 +9,9 @@ package com.cherry.lib.doc.office.pg.control;
import com.cherry.lib.doc.office.common.ISlideShow;
import com.cherry.lib.doc.office.system.IControl;
import com.cherry.lib.doc.office.system.beans.AEventManage;
import android.graphics.Rect;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
......@@ -25,134 +27,110 @@ import android.view.View;
* <p>
* 负责人: ljj8494
* <p>
* 负责小组:
* 负责小组:
* <p>
* <p>
*/
public class PGEventManage extends AEventManage
{
public class PGEventManage extends AEventManage {
/**
*
* @param spreadsheet
*
*/
public PGEventManage(Presentation presentation, IControl control)
{
public PGEventManage(Presentation presentation, IControl control) {
super(presentation.getContext(), control);
this.presentation = presentation;
presentation.setOnTouchListener(this);
presentation.setLongClickable(true);
}
}
/**
* 触摸事件
*
*/
public boolean onTouch(View v, MotionEvent event)
{
super.onTouch(v, event);
public boolean onTouch(View v, MotionEvent event) {
super.onTouch(v, event);
return false;
}
/**
*
*
*/
public boolean onDoubleTap(MotionEvent e)
{
public boolean onDoubleTap(MotionEvent e) {
super.onDoubleTap(e);
return true;
}
/**
*
*
*/
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
super.onScroll(e1, e2, distanceX, distanceY);
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
super.onScroll(e1, e2, distanceX, distanceY);
return true;
}
/**
* Fling the scroll view
*
* @param velocityX X方向速率
* @param velocityY Y方向速率
* @param velocityX X方向速率
* @param velocityY Y方向速率
*/
public void fling(int velocityX, int velocityY)
{
if(presentation.isSlideShow())
{
if (Math.abs(velocityY) < 400 && Math.abs(velocityX) < 400)
{
public void fling(int velocityX, int velocityY) {
if (presentation.isSlideShow()) {
if (Math.abs(velocityY) < 400 && Math.abs(velocityX) < 400) {
presentation.slideShow(ISlideShow.SlideShow_NextStep);
return;
}
super.fling(velocityX, velocityY);
int currentIndex = presentation.getCurrentIndex();
if (Math.abs(velocityY) > Math.abs(velocityX))
{
if (Math.abs(velocityY) > Math.abs(velocityX)) {
//vertical
if (velocityY < 0 && currentIndex >= 0)
{
//previous step
presentation.slideShow(ISlideShow.SlideShow_NextStep);
}
else if (velocityY > 0 && currentIndex <= presentation.getRealSlideCount() - 1)
{
if (velocityY < 0 && currentIndex >= 0) {
//previous step
presentation.slideShow(ISlideShow.SlideShow_NextStep);
} else if (velocityY > 0 && currentIndex <= presentation.getRealSlideCount() - 1) {
//next step
presentation.slideShow(ISlideShow.SlideShow_PreviousStep);
}
}
else
{
} else {
// horizontal
if (velocityX < 0 && currentIndex >= 0)
{
if (velocityX < 0 && currentIndex >= 0) {
// previous Slide
presentation.slideShow(ISlideShow.SlideShow_PreviousSlide);
}
else if (velocityX > 0 && currentIndex < presentation.getRealSlideCount() - 1)
{
} else if (velocityX > 0 && currentIndex < presentation.getRealSlideCount() - 1) {
// next Slide
presentation.slideShow(ISlideShow.SlideShow_NextSlide);
}
}
}
}
/**
*
*
*/
public boolean onSingleTapUp(MotionEvent e)
{
public boolean onSingleTapUp(MotionEvent e) {
Log.e("PGEventManage", "onSingleTapUp");
control.getMainFrame().singleTap();
super.onSingleTapUp(e);
if (e.getAction() == MotionEvent.ACTION_UP)
{
if (e.getAction() == MotionEvent.ACTION_UP) {
Rect drawRect = presentation.getSlideDrawingRect();
if(presentation.isSlideShow() && drawRect.contains((int)e.getX(), (int)e.getY()))
{
if (presentation.isSlideShow() && drawRect.contains((int) e.getX(), (int) e.getY())) {
//not click hyperlink, then go to next step
this.presentation.slideShow(ISlideShow.SlideShow_NextStep);
}
}
return true;
}
/**
*
*
*/
public void dispose()
{
public void dispose() {
super.dispose();
presentation = null;
}
// Spreadsheet
private Presentation presentation;
}
......@@ -428,6 +428,12 @@ public class PGPrintMode extends FrameLayout implements IPageListViewListener {
return control.getMainFrame().getPageListViewMovingPosition();
}
@Override
public void singleTab() {
Log.e("PGPrintMode", "singleTab");
control.getMainFrame().singleTap();
}
/**
*
*/
......
/*
* 文件名称: PDFe.java
*
*
* 编译器: android2.2
* 时间: 下午4:05:31
*/
......@@ -13,6 +13,7 @@ import com.cherry.lib.doc.office.constant.MainConstant;
import android.graphics.Point;
import android.graphics.Rect;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnDoubleTapListener;
import android.view.GestureDetector.OnGestureListener;
......@@ -26,24 +27,21 @@ import android.widget.Toast;
public class APageListEventManage implements
ScaleGestureDetector.OnScaleGestureListener, OnGestureListener,Runnable,
OnTouchListener, OnDoubleTapListener, OnClickListener
{
ScaleGestureDetector.OnScaleGestureListener, OnGestureListener, Runnable,
OnTouchListener, OnDoubleTapListener, OnClickListener {
private static final int MOVING_DIAGONALLY = 0;
private static final int MOVING_LEFT = 1;
private static final int MOVING_RIGHT = 2;
private static final int MOVING_UP = 3;
private static final int MOVING_DOWN = 4;
private static final float MAX_ZOOM = 3.0f;
/**
*
* @param pdfListView
*
*/
public APageListEventManage(APageListView listView)
{
public APageListEventManage(APageListView listView) {
this.listView = listView;
gesture = new GestureDetector(listView.getContext(), this);
mScroller = new Scroller(listView.getContext());
......@@ -52,54 +50,41 @@ public class APageListEventManage implements
}
/**
*
* @see com.cherry.lib.doc.office.system.beans.AEventManage#zoom(android.view.MotionEvent)
*
*/
protected boolean zoom(MotionEvent event)
{
return false;
protected boolean zoom(MotionEvent event) {
return false;
}
/**
* 触摸事件
*
*/
protected boolean processOnTouch(MotionEvent event)
{
protected boolean processOnTouch(MotionEvent event) {
eventPointerCount = event.getPointerCount();
if (event.getActionMasked() == MotionEvent.ACTION_DOWN)
{
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
isOnFling = false;
isTouchEventIn = true;
}
if (mScaleGestureDetector != null)
{
if (mScaleGestureDetector != null) {
mScaleGestureDetector.onTouchEvent(event);
}
if (!isScaling && gesture != null)
{
if (!isScaling && gesture != null) {
gesture.onTouchEvent(event);
}
if (event.getActionMasked() == MotionEvent.ACTION_UP)
{
if (event.getActionMasked() == MotionEvent.ACTION_UP) {
isProcessOnScroll = true;
isTouchEventIn = false;
APageListItem pageView = listView.getCurrentPageView();
if (pageView != null)
{
if (mScroller.isFinished())
{
if (pageView != null) {
if (mScroller.isFinished()) {
// If, at the end of user interaction, there is no
// current inertial scroll in operation then animate
// the view onto screen if necessary
if (!isDoubleTap)
{
if (!isDoubleTap) {
slideViewOntoScreen(pageView);
}
}
if (mScroller.isFinished() && isOnScroll)
{
if (mScroller.isFinished() && isOnScroll) {
// If still there is no inertial scroll in operation
// then the layout is stable
listView.getPageListViewListener().setDrawPictrue(true);
......@@ -109,101 +94,82 @@ public class APageListEventManage implements
isDoubleTap = false;
isOnScroll = false;
toast.cancel();
}
//listView.requestLayout();
return true;
}
/**
* 触摸事件
*
*/
public boolean onTouch(View v, MotionEvent event)
{
public boolean onTouch(View v, MotionEvent event) {
listView.getPageListViewListener().onEventMethod(v, event, null, -1.0f, -1.0f, IPageListViewListener.ON_TOUCH);
return false;
}
/**
*
*
*/
public boolean onDown(MotionEvent e)
{
public boolean onDown(MotionEvent e) {
mScroller.forceFinished(true);
listView.getPageListViewListener().onEventMethod(listView, e, null, -1.0f, -1.0f, IPageListViewListener.ON_DOWN);
return true;
}
/**
*
* @see com.cherry.lib.doc.office.system.beans.AEventManage#onFling(android.view.MotionEvent, android.view.MotionEvent, float, float)
*
*/
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
listView.getPageListViewListener().onEventMethod(listView, e1, e2, velocityX, velocityY, IPageListViewListener.ON_FLING);
if (!isProcessOnScroll || isDoubleTap)
{
if (!isProcessOnScroll || isDoubleTap) {
return true;
}
View pageView = listView.getCurrentPageView();
if (pageView != null)
{
if (pageView != null) {
Rect bounds = listView.getScrollBounds(pageView);
if(listView.getPageListViewListener().getPageListViewMovingPosition() == IPageListViewListener.Moving_Horizontal)
{
if (pageView.getWidth() <= listView.getWidth()
|| listView.getPageListViewListener().isChangePage())
{
switch (directionOfTravel(velocityX, velocityY))
{
case MOVING_LEFT:
if (bounds.left >= 0)
{
isOnFling = true;
listView.nextPageView();
return true;
}
break;
case MOVING_RIGHT:
if (bounds.right <= 0)
{
isOnFling = true;
listView.previousPageview();
return true;
}
break;
}
if (listView.getPageListViewListener().getPageListViewMovingPosition() == IPageListViewListener.Moving_Horizontal) {
if (pageView.getWidth() <= listView.getWidth()
|| listView.getPageListViewListener().isChangePage()) {
switch (directionOfTravel(velocityX, velocityY)) {
case MOVING_LEFT:
if (bounds.left >= 0) {
isOnFling = true;
listView.nextPageView();
return true;
}
break;
case MOVING_RIGHT:
if (bounds.right <= 0) {
isOnFling = true;
listView.previousPageview();
return true;
}
break;
}
}
else
{
if (pageView.getHeight() <= listView.getHeight()
|| listView.getPageListViewListener().isChangePage())
{
switch (directionOfTravel(velocityX, velocityY))
{
case MOVING_UP:
if (bounds.top >= 0)
{
isOnFling = true;
listView.nextPageView();
return true;
}
break;
case MOVING_DOWN:
if (bounds.bottom <= 0)
{
isOnFling = true;
listView.previousPageview();
return true;
}
break;
}
}
} else {
if (pageView.getHeight() <= listView.getHeight()
|| listView.getPageListViewListener().isChangePage()) {
switch (directionOfTravel(velocityX, velocityY)) {
case MOVING_UP:
if (bounds.top >= 0) {
isOnFling = true;
listView.nextPageView();
return true;
}
break;
case MOVING_DOWN:
if (bounds.bottom <= 0) {
isOnFling = true;
listView.previousPageview();
return true;
}
break;
}
}
}
mScrollerLastX = mScrollerLastY = 0;
// If the page has been dragged out of bounds then we want to spring back
// nicely. fling jumps back into bounds instantly, so we don't want to use
......@@ -218,46 +184,36 @@ public class APageListEventManage implements
expandedBounds.inset(-100, -100);
if (withinBoundsInDirectionOfTravel(bounds, velocityX, velocityY)
&& expandedBounds.contains(0, 0))
{
mScroller.fling(0, 0, (int)velocityX, (int)velocityY, bounds.left, bounds.right,
bounds.top, bounds.bottom);
&& expandedBounds.contains(0, 0)) {
mScroller.fling(0, 0, (int) velocityX, (int) velocityY, bounds.left, bounds.right,
bounds.top, bounds.bottom);
listView.post(this);
}
}
return true;
}
/**
*
*
*/
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
listView.getPageListViewListener().onEventMethod(listView, e1, e2, distanceX, distanceY, IPageListViewListener.ON_SCROLL);
if (isProcessOnScroll && !isDoubleTap)
{
if (isProcessOnScroll && !isDoubleTap) {
listView.getPageListViewListener().setDrawPictrue(false);
isOnScroll = true;
mXScroll -= distanceX;
mYScroll -= distanceY;
if (!listView.getPageListViewListener().isChangePage())
{
if (!listView.getPageListViewListener().isChangePage()) {
APageListItem item = listView.getCurrentPageView();
if (item != null && item.getWidth() > listView.getWidth())
{
if (distanceX > 0)
{
if (item != null && item.getWidth() > listView.getWidth()) {
if (distanceX > 0) {
if (listView.getWidth() - mXScroll - item.getLeft() > item.getWidth()
&& item.getPageIndex() < listView.getPageCount() - 1)
{
&& item.getPageIndex() < listView.getPageCount() - 1) {
mXScroll = -(item.getWidth() - listView.getWidth() + item.getLeft());
}
}
else if (distanceX < 0)
{
} else if (distanceX < 0) {
if (mXScroll + item.getLeft() > 0
&& item.getPageIndex() != 0)
{
&& item.getPageIndex() != 0) {
mXScroll = 0;
}
}
......@@ -267,34 +223,28 @@ public class APageListEventManage implements
}
return true;
}
/**
*
* @see android.view.ScaleGestureDetector.OnScaleGestureListener#onScale(android.view.ScaleGestureDetector)
*
*/
@ Override
public boolean onScale(ScaleGestureDetector detector)
{
if (eventPointerCount <= 1 || !listView.getPageListViewListener().isTouchZoom())
{
@Override
public boolean onScale(ScaleGestureDetector detector) {
if (eventPointerCount <= 1 || !listView.getPageListViewListener().isTouchZoom()) {
return true;
}
isTouchEventIn = true;
float previousScale = listView.getZoom();
float zoom = Math.min(Math.max(listView.getZoom() * detector.getScaleFactor(), listView.getFitZoom()), MAX_ZOOM);
if ((int)(zoom * MainConstant.ZOOM_ROUND) != (int)(previousScale * MainConstant.ZOOM_ROUND))
{
if ((int) (zoom * MainConstant.ZOOM_ROUND) != (int) (previousScale * MainConstant.ZOOM_ROUND)) {
isOnScroll = true;
float factor = zoom / previousScale;
listView.setZoom(zoom, false);
APageListItem v = listView.getCurrentPageView();
if (v != null)
{
if (v != null) {
// Work out the focus point relative to the view top left
int viewFocusX = (int)detector.getFocusX() - (v.getLeft() + mXScroll);
int viewFocusY = (int)detector.getFocusY() - (v.getTop() + mYScroll);
int viewFocusX = (int) detector.getFocusX() - (v.getLeft() + mXScroll);
int viewFocusY = (int) detector.getFocusY() - (v.getTop() + mYScroll);
// Scroll to maintain the focus point
mXScroll += viewFocusX - viewFocusX * factor;
mYScroll += viewFocusY - viewFocusY * factor;
......@@ -302,24 +252,19 @@ public class APageListEventManage implements
}
}
// 提示
if(listView.getPageListViewListener().isShowZoomingMsg())
{
toast.setText((int)Math.round(zoom * 100) + "%");
if (listView.getPageListViewListener().isShowZoomingMsg()) {
toast.setText((int) Math.round(zoom * 100) + "%");
toast.show();
}
}
return true;
}
/**
*
* @see android.view.ScaleGestureDetector.OnScaleGestureListener#onScaleBegin(android.view.ScaleGestureDetector)
*
*/
@ Override
public boolean onScaleBegin(ScaleGestureDetector detector)
{
if (eventPointerCount <= 1 || !listView.getPageListViewListener().isTouchZoom())
{
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
if (eventPointerCount <= 1 || !listView.getPageListViewListener().isTouchZoom()) {
return true;
}
isScaling = true;
......@@ -327,71 +272,61 @@ public class APageListEventManage implements
isProcessOnScroll = false;
return true;
}
/**
*
* @see android.view.ScaleGestureDetector.OnScaleGestureListener#onScaleEnd(android.view.ScaleGestureDetector)
*
*/
@ Override
public void onScaleEnd(ScaleGestureDetector detector)
{
if (eventPointerCount <= 1 || !listView.getPageListViewListener().isTouchZoom())
{
@Override
public void onScaleEnd(ScaleGestureDetector detector) {
if (eventPointerCount <= 1 || !listView.getPageListViewListener().isTouchZoom()) {
return;
}
isScaling = false;
}
/**
*
*
*/
public void onShowPress(MotionEvent e)
{
public void onShowPress(MotionEvent e) {
listView.getPageListViewListener().onEventMethod(listView, e, null, -1.0f, -1.0f, IPageListViewListener.ON_SHOW_PRESS);
}
/**
*
*
*/
public boolean onSingleTapUp(MotionEvent e)
{
public boolean onSingleTapUp(MotionEvent e) {
Log.e("APageListEventManage", "onSingleTapUp");
listView.getPageListViewListener().singleTab();
listView.getPageListViewListener().onEventMethod(listView, e, null, -1.0f, -1.0f, IPageListViewListener.ON_SINGLE_TAP_UP);
return false;
}
/**
*
*
*/
public void onLongPress(MotionEvent e)
{
public void onLongPress(MotionEvent e) {
listView.getPageListViewListener().onEventMethod(listView, e, null, -1.0f, -1.0f, IPageListViewListener.ON_LONG_PRESS);
}
/**
*
*
*/
public void onClick(View v)
{
public void onClick(View v) {
listView.getPageListViewListener().onEventMethod(listView, null, null, -1.0f, -1.0f, IPageListViewListener.ON_CLICK);
}
/**
*
*
*/
public boolean onSingleTapConfirmed(MotionEvent e)
{
public boolean onSingleTapConfirmed(MotionEvent e) {
listView.getPageListViewListener().onEventMethod(listView, e, null, -1.0f, -1.0f, IPageListViewListener.ON_SINGLE_TAP_CONFIRMED);
return false;
}
/**
*
*
*/
public boolean onDoubleTap(MotionEvent e)
{
public boolean onDoubleTap(MotionEvent e) {
isProcessOnScroll = true;
isTouchEventIn = false;
isDoubleTap = true;
......@@ -402,21 +337,18 @@ public class APageListEventManage implements
/**
*
*/
public boolean onDoubleTapEvent(MotionEvent e)
{
public boolean onDoubleTapEvent(MotionEvent e) {
isTouchEventIn = false;
isDoubleTap = true;
listView.getPageListViewListener().onEventMethod(listView, e, null, -1.0f, -1.0f, IPageListViewListener.ON_DOUBLE_TAP_EVENT);
return false;
}
/**
*
*
*/
public void run()
{
if (!mScroller.isFinished())
{
public void run() {
if (!mScroller.isFinished()) {
listView.getPageListViewListener().setDrawPictrue(false);
mScroller.computeScrollOffset();
int x = mScroller.getCurrX();
......@@ -427,9 +359,7 @@ public class APageListEventManage implements
mScrollerLastY = y;
listView.requestLayout();
listView.post(this);
}
else if (!isTouchEventIn)
{
} else if (!isTouchEventIn) {
// End of an inertial scroll and the user is not interacting.
// The layout is stable
listView.postRepaint(listView.getCurrentPageView());
......@@ -437,105 +367,87 @@ public class APageListEventManage implements
listView.getPageListViewListener().setDrawPictrue(true);
}
}
/**
*
* @param v
*
*/
protected void slideViewOntoScreen(APageListItem pageItem)
{
protected void slideViewOntoScreen(APageListItem pageItem) {
Point corr = listView.getCorrection(listView.getScrollBounds(pageItem));
if (corr.x != 0 || corr.y != 0)
{
if (corr.x != 0 || corr.y != 0) {
mScrollerLastX = mScrollerLastY = 0;
mScroller.startScroll(0, 0, corr.x, corr.y, 400);
listView.post(this);
}
listView.getPageListViewListener().resetSearchResult(pageItem);
}
/**
* @return Returns the mXScroll.
*/
protected int getScrollX()
{
protected int getScrollX() {
return mXScroll;
}
/**
* @return Returns the mYScroll.
*/
protected int getScrollY()
{
protected int getScrollY() {
return mYScroll;
}
/**
*
*
*/
protected void setScrollAxisValue(int x, int y)
{
protected void setScrollAxisValue(int x, int y) {
mXScroll = x;
mYScroll = y;
}
/**
*
*
*/
protected boolean isTouchEventIn()
{
protected boolean isTouchEventIn() {
return this.isTouchEventIn;
}
/**
*
*
*/
protected boolean isScrollerFinished()
{
protected boolean isScrollerFinished() {
return mScroller.isFinished();
}
/**
*
*
*/
protected boolean isOnFling()
{
protected boolean isOnFling() {
return this.isOnFling;
}
/**
*
* @param vx
* @param vy
* @return
*/
protected int directionOfTravel(float vx, float vy)
{
if (Math.abs(vx) > 2 * Math.abs(vy))
{
protected int directionOfTravel(float vx, float vy) {
if (Math.abs(vx) > 2 * Math.abs(vy)) {
return (vx > 0) ? MOVING_RIGHT : MOVING_LEFT;
}
else if (Math.abs(vy) > 2 * Math.abs(vx))
{
} else if (Math.abs(vy) > 2 * Math.abs(vx)) {
return (vy > 0) ? MOVING_DOWN : MOVING_UP;
}
else
{
} else {
return MOVING_DIAGONALLY;
}
}
/**
*
* @param bounds
* @param vx
* @param vy
* @return
*/
protected boolean withinBoundsInDirectionOfTravel(Rect bounds, float vx, float vy)
{
switch (directionOfTravel(vx, vy))
{
protected boolean withinBoundsInDirectionOfTravel(Rect bounds, float vx, float vy) {
switch (directionOfTravel(vx, vy)) {
case MOVING_DIAGONALLY:
return bounds.contains(0, 0);
case MOVING_LEFT:
......@@ -550,13 +462,12 @@ public class APageListEventManage implements
throw new NoSuchElementException();
}
}
/**
*
*
*/
public void dispose()
{
public void dispose() {
}
private boolean isOnFling;
......@@ -567,7 +478,7 @@ public class APageListEventManage implements
// Whether process onScroll event
private boolean isProcessOnScroll = true;
// Whether the user is touch event in
private boolean isTouchEventIn;
private boolean isTouchEventIn;
// Whether the user is currently pinch zooming
private boolean isScaling;
// x axis value of last time
......
/*
* 文件名称: PDFPageAdapterView.java
*
*
* 编译器: android2.2
* 时间: 下午1:49:11
*/
......@@ -9,6 +9,7 @@ package com.cherry.lib.doc.office.system.beans.pagelist;
import java.util.LinkedList;
import com.cherry.lib.doc.office.constant.MainConstant;
import com.cherry.lib.doc.office.system.IControl;
import com.cherry.lib.doc.office.system.IMainFrame;
import android.content.Context;
......@@ -25,82 +26,69 @@ import android.view.ViewParent;
import android.widget.Adapter;
import android.widget.AdapterView;
public class APageListView extends AdapterView<Adapter>
{
public class APageListView extends AdapterView<Adapter> {
private static final int GAP = 20;
/**
*
* @param context
*/
public APageListView(Context context)
{
public APageListView(Context context) {
super(context);
}
/**
*
*
*/
public APageListView(Context context, IPageListViewListener listener)
{
public APageListView(Context context, IPageListViewListener listener) {
super(context);
this.pageListViewListener = listener;
eventManage = new APageListEventManage(this);
pageAdapter = new APageListAdapter(this);
setLongClickable(true);
this.post(new Runnable()
{
@ Override
public void run()
{
setLongClickable(true);
this.post(new Runnable() {
@Override
public void run() {
// get thumbnail, pageListViewListener = null;
if (pageListViewListener != null
&& pageListViewListener.isInit())
{
&& pageListViewListener.isInit()) {
init();
}
}
});
}
/**
*
*/
public void init()
{
public void init() {
isInit = true;
requestLayout();
}
/**
*
*
*/
public void requestLayout()
{
if (isDoRequestLayout)
{
public void requestLayout() {
if (isDoRequestLayout) {
super.requestLayout();
}
}
/**
*
*
*/
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int n = getChildCount();
for (int i = 0; i < n; i++)
{
for (int i = 0; i < n; i++) {
View view = getChildAt(i);
if (view instanceof APageListItem)
{
APageListItem pv = (APageListItem)view;
pv.measure(View.MeasureSpec.EXACTLY | (int)(pv.getPageWidth() * zoom),
View.MeasureSpec.EXACTLY | (int)(pv.getPageHeight() * zoom));
if (view instanceof APageListItem) {
APageListItem pv = (APageListItem) view;
pv.measure(View.MeasureSpec.EXACTLY | (int) (pv.getPageWidth() * zoom),
View.MeasureSpec.EXACTLY | (int) (pv.getPageHeight() * zoom));
}
}
}
......@@ -110,111 +98,90 @@ public class APageListView extends AdapterView<Adapter>
* you were just added to the view hierarchy, you're called with the old
* values of 0.
*
* @param w Current width of this view.
* @param h Current height of this view.
* @param w Current width of this view.
* @param h Current height of this view.
* @param oldw Old width of this view.
* @param oldh Old height of this view.
*/
protected void onSizeChanged(int w, int h, int oldw, int oldh)
{
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if (isConfigurationChanged)
{
float fitZoom = getFitZoom();
if(zoom < fitZoom)
{
setZoom(fitZoom, false);
isInit = false;
postDelayed(new Runnable()
{
if (isConfigurationChanged) {
float fitZoom = getFitZoom();
if (zoom < fitZoom) {
setZoom(fitZoom, false);
isInit = false;
postDelayed(new Runnable() {
/**
*
*/
public void run()
{
isInit = true;
isResetLayout = true;
*
*/
public void run() {
isInit = true;
isResetLayout = true;
requestLayout();
}
}, 1);
pageListViewListener.changeZoom();
}
pageListViewListener.changeZoom();
}
}
}
/**
*
*
*/
public boolean onTouchEvent(MotionEvent event)
{
APageListItem pageView = getCurrentPageView();
if (pageView != null)
{
if (pageView.getControl().getSysKit().getCalloutManager().getDrawingMode() != MainConstant.DRAWMODE_NORMAL)
{
return false;
}
}
public boolean onTouchEvent(MotionEvent event) {
APageListItem pageView = getCurrentPageView();
if (pageView != null) {
if (pageView.getControl().getSysKit().getCalloutManager().getDrawingMode() != MainConstant.DRAWMODE_NORMAL) {
return false;
}
}
eventManage.processOnTouch(event);
pageListViewListener.onEventMethod(this, event, null, -1, -1, IMainFrame.ON_TOUCH);
return true;
}
/**
*
* @see android.widget.AdapterView#onLayout(boolean, int, int, int, int)
*
*/
@ Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom)
{
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
if (!isInit)
{
if (!isInit) {
return;
}
if(pageListViewListener.getPageListViewMovingPosition() == IPageListViewListener.Moving_Horizontal)
{
layout_Horizontal();
}
else
{
layout_Vertical();
if (pageListViewListener.getPageListViewMovingPosition() == IPageListViewListener.Moving_Horizontal) {
layout_Horizontal();
} else {
layout_Vertical();
}
invalidate();
if (isConfigurationChanged)
{
if (isConfigurationChanged) {
isConfigurationChanged = false;
APageListItem pageView = getCurrentPageView();
if (pageView != null)
{
if (pageView != null) {
postRepaint(pageView);
}
}
}
private void layout_Horizontal()
{
APageListItem currentView = childViewsCache.get(currentIndex);
private void layout_Horizontal() {
APageListItem currentView = childViewsCache.get(currentIndex);
Point cvOffset;
if (!isResetLayout)
{
if (!isResetLayout) {
// Move to next or previous if current is sufficiently off center
if (currentView != null && Math.abs(currentView.getLeft()) < currentView.getWidth())
{
if (currentView != null && Math.abs(currentView.getLeft()) < currentView.getWidth()) {
cvOffset = getScreenSizeOffset(currentView);
// next page
if (currentView.getLeft() + currentView.getMeasuredWidth()
+ cvOffset.x + GAP / 2 + eventManage.getScrollX() < getWidth() / 2
&& currentIndex + 1 < pageAdapter.getCount()
&& !eventManage.isOnFling())
{
if (currentView.getLeft() + currentView.getMeasuredWidth()
+ cvOffset.x + GAP / 2 + eventManage.getScrollX() < getWidth() / 2
&& currentIndex + 1 < pageAdapter.getCount()
&& !eventManage.isOnFling()) {
postUnRepaint(currentView);
post(eventManage);
currentIndex++;
......@@ -222,9 +189,8 @@ public class APageListView extends AdapterView<Adapter>
}
// previous page
else if (currentView.getLeft() - cvOffset.x - GAP / 2 + eventManage.getScrollX() >= getWidth() / 2
&& currentIndex > 0
&& !eventManage.isOnFling())
{
&& currentIndex > 0
&& !eventManage.isOnFling()) {
postUnRepaint(currentView);
post(eventManage);
currentIndex--;
......@@ -235,39 +201,31 @@ public class APageListView extends AdapterView<Adapter>
// Remove not needed children and hold them for reuse
int numChildren = childViewsCache.size();
int pIndexs[] = new int[numChildren];
for (int i = 0; i < numChildren; i++)
{
for (int i = 0; i < numChildren; i++) {
pIndexs[i] = childViewsCache.keyAt(i);
}
for (int i = 0; i < numChildren; i++)
{
if ( pIndexs[i] < currentIndex - 1 || pIndexs[i] > currentIndex + 1)
{
APageListItem pv = childViewsCache.get( pIndexs[i]);
for (int i = 0; i < numChildren; i++) {
if (pIndexs[i] < currentIndex - 1 || pIndexs[i] > currentIndex + 1) {
APageListItem pv = childViewsCache.get(pIndexs[i]);
pv.releaseResources();
pageViewCache.add(pv);
removeViewInLayout(pv);
childViewsCache.remove(pIndexs[i]);
}
}
}
else
{
} else {
isResetLayout = false;
boolean isRepaint = false;
eventManage.setScrollAxisValue(0, 0);
// Remove not needed children and hold them for reuse
int numChildren = childViewsCache.size();
int pIndexs[] = new int[numChildren];
for (int i = 0; i < numChildren; i++)
{
for (int i = 0; i < numChildren; i++) {
pIndexs[i] = childViewsCache.keyAt(i);
}
for (int i = 0; i < numChildren; i++)
{
if ( pIndexs[i] < currentIndex - 1 || pIndexs[i] > currentIndex + 1)
{
APageListItem pv = childViewsCache.get( pIndexs[i]);
for (int i = 0; i < numChildren; i++) {
if (pIndexs[i] < currentIndex - 1 || pIndexs[i] > currentIndex + 1) {
APageListItem pv = childViewsCache.get(pIndexs[i]);
pv.releaseResources();
pageViewCache.add(pv);
removeViewInLayout(pv);
......@@ -275,8 +233,7 @@ public class APageListView extends AdapterView<Adapter>
isRepaint = pIndexs[i] == currentIndex;
}
}
if ((int)(zoom * 100) != 100 || !isRepaint)
{
if ((int) (zoom * 100) != 100 || !isRepaint) {
post(eventManage);
}
}
......@@ -289,14 +246,11 @@ public class APageListView extends AdapterView<Adapter>
// offset it to center within the screen area, and to keep
// the views spaced out
cvOffset = getScreenSizeOffset(currentView);
if (notPresent)
{
if (notPresent) {
//Main item not already present. Just place it top left
cvLeft = cvOffset.x;
cvTop = cvOffset.y;
}
else
{
} else {
// Main item already present. Adjust by scroll offsets
cvLeft = currentView.getLeft() + eventManage.getScrollX();
cvTop = currentView.getTop() + eventManage.getScrollY();
......@@ -306,16 +260,13 @@ public class APageListView extends AdapterView<Adapter>
cvRight = cvLeft + currentView.getMeasuredWidth();
cvBottom = cvTop + currentView.getMeasuredHeight();
if (!eventManage.isTouchEventIn() && eventManage.isScrollerFinished())
{
if (!eventManage.isTouchEventIn() && eventManage.isScrollerFinished()) {
Point corr = getCorrection(getScrollBounds(cvLeft, cvTop, cvRight, cvBottom));
cvRight += corr.x;
cvLeft += corr.x;
cvTop += corr.y;
cvBottom += corr.y;
}
else if (currentView.getMeasuredHeight() <= getHeight())
{
} else if (currentView.getMeasuredHeight() <= getHeight()) {
// When the current view is as small as the screen in height, clamp
// it vertically
Point corr = getCorrection(getScrollBounds(cvLeft, cvTop, cvRight, cvBottom));
......@@ -326,46 +277,40 @@ public class APageListView extends AdapterView<Adapter>
currentView.layout(cvLeft, cvTop, cvRight, cvBottom);
// previous page
if (currentIndex > 0)
{
if (currentIndex > 0) {
View preView = createPageView(currentIndex - 1);
Point leftOffset = getScreenSizeOffset(preView);
int gap = leftOffset.x + GAP + cvOffset.x;
preView.layout(cvLeft - preView.getMeasuredWidth() - gap,
(cvBottom + cvTop - preView.getMeasuredHeight()) / 2, cvLeft - gap,
(cvBottom + cvTop + preView.getMeasuredHeight()) / 2);
(cvBottom + cvTop - preView.getMeasuredHeight()) / 2, cvLeft - gap,
(cvBottom + cvTop + preView.getMeasuredHeight()) / 2);
}
// next page
if (currentIndex + 1 < pageAdapter.getCount())
{
if (currentIndex + 1 < pageAdapter.getCount()) {
View nextView = createPageView(currentIndex + 1);
Point rightOffset = getScreenSizeOffset(nextView);
int gap = cvOffset.x + GAP + rightOffset.x;
nextView.layout(cvRight + gap,
(cvBottom + cvTop - nextView.getMeasuredHeight()) / 2,
cvRight + nextView.getMeasuredWidth() + gap,
(cvBottom + cvTop + nextView.getMeasuredHeight()) / 2);
(cvBottom + cvTop - nextView.getMeasuredHeight()) / 2,
cvRight + nextView.getMeasuredWidth() + gap,
(cvBottom + cvTop + nextView.getMeasuredHeight()) / 2);
}
}
private void layout_Vertical()
{
APageListItem currentView = childViewsCache.get(currentIndex);
private void layout_Vertical() {
APageListItem currentView = childViewsCache.get(currentIndex);
Point cvOffset;
if (!isResetLayout)
{
if (!isResetLayout) {
// Move to next or previous if current is sufficiently off center
if (currentView != null /*&& Math.abs(currentView.getTop()) < currentView.getHeight()*/)
{
if (currentView != null /*&& Math.abs(currentView.getTop()) < currentView.getHeight()*/) {
cvOffset = getScreenSizeOffset(currentView);
// next page
if (currentView.getTop() + currentView.getMeasuredHeight()
+ cvOffset.y + GAP / 2 + eventManage.getScrollY() < getHeight() / 2
&& currentIndex + 1 < pageAdapter.getCount()
&& !eventManage.isOnFling())
{
if (currentView.getTop() + currentView.getMeasuredHeight()
+ cvOffset.y + GAP / 2 + eventManage.getScrollY() < getHeight() / 2
&& currentIndex + 1 < pageAdapter.getCount()
&& !eventManage.isOnFling()) {
postUnRepaint(currentView);
post(eventManage);
currentIndex++;
......@@ -373,52 +318,43 @@ public class APageListView extends AdapterView<Adapter>
}
// previous page
else if (currentView.getTop() - cvOffset.y - GAP / 2 + eventManage.getScrollY() >= getHeight() / 2
&& currentIndex > 0
&& !eventManage.isOnFling())
{
&& currentIndex > 0
&& !eventManage.isOnFling()) {
postUnRepaint(currentView);
post(eventManage);
currentIndex--;
Log.e("current --", String.valueOf(currentIndex));
}
}
// Remove not needed children and hold them for reuse
int numChildren = childViewsCache.size();
int pIndexs[] = new int[numChildren];
for (int i = 0; i < numChildren; i++)
{
for (int i = 0; i < numChildren; i++) {
pIndexs[i] = childViewsCache.keyAt(i);
}
for (int i = 0; i < numChildren; i++)
{
if ( pIndexs[i] < currentIndex - 1 || pIndexs[i] > currentIndex + 1)
{
APageListItem pv = childViewsCache.get( pIndexs[i]);
for (int i = 0; i < numChildren; i++) {
if (pIndexs[i] < currentIndex - 1 || pIndexs[i] > currentIndex + 1) {
APageListItem pv = childViewsCache.get(pIndexs[i]);
pv.releaseResources();
pageViewCache.add(pv);
removeViewInLayout(pv);
childViewsCache.remove(pIndexs[i]);
}
}
}
else
{
} else {
isResetLayout = false;
boolean isRepaint = false;
eventManage.setScrollAxisValue(0, 0);
// Remove not needed children and hold them for reuse
int numChildren = childViewsCache.size();
int pIndexs[] = new int[numChildren];
for (int i = 0; i < numChildren; i++)
{
for (int i = 0; i < numChildren; i++) {
pIndexs[i] = childViewsCache.keyAt(i);
}
for (int i = 0; i < numChildren; i++)
{
if ( pIndexs[i] < currentIndex - 1 || pIndexs[i] > currentIndex + 1)
{
APageListItem pv = childViewsCache.get( pIndexs[i]);
for (int i = 0; i < numChildren; i++) {
if (pIndexs[i] < currentIndex - 1 || pIndexs[i] > currentIndex + 1) {
APageListItem pv = childViewsCache.get(pIndexs[i]);
pv.releaseResources();
pageViewCache.add(pv);
removeViewInLayout(pv);
......@@ -426,9 +362,8 @@ public class APageListView extends AdapterView<Adapter>
isRepaint = pIndexs[i] == currentIndex;
}
}
if ((int)(zoom * 100) != 100 || !isRepaint)
{
if ((int) (zoom * 100) != 100 || !isRepaint) {
post(eventManage);
}
}
......@@ -441,14 +376,11 @@ public class APageListView extends AdapterView<Adapter>
// offset it to center within the screen area, and to keep
// the views spaced out
cvOffset = getScreenSizeOffset(currentView);
if (notPresent)
{
if (notPresent) {
//Main item not already present. Just place it top left
cvLeft = cvOffset.x;
cvTop = cvOffset.y;
}
else
{
} else {
// Main item already present. Adjust by scroll offsets
cvLeft = currentView.getLeft() + eventManage.getScrollX();
cvTop = currentView.getTop() + eventManage.getScrollY();
......@@ -458,16 +390,13 @@ public class APageListView extends AdapterView<Adapter>
cvRight = cvLeft + currentView.getMeasuredWidth();
cvBottom = cvTop + currentView.getMeasuredHeight();
if (!eventManage.isTouchEventIn() && eventManage.isScrollerFinished())
{
if (!eventManage.isTouchEventIn() && eventManage.isScrollerFinished()) {
Point corr = getCorrection(getScrollBounds(cvLeft, cvTop, cvRight, cvBottom));
cvRight += corr.x;
cvLeft += corr.x;
cvTop += corr.y;
cvBottom += corr.y;
}
else if (currentView.getMeasuredWidth() <= getWidth())
{
} else if (currentView.getMeasuredWidth() <= getWidth()) {
// When the current view is as small as the screen in height, clamp
// it vertically
Point corr = getCorrection(getScrollBounds(cvLeft, cvTop, cvRight, cvBottom));
......@@ -478,62 +407,54 @@ public class APageListView extends AdapterView<Adapter>
currentView.layout(cvLeft, cvTop, cvRight, cvBottom);
// previous page
if (currentIndex > 0)
{
if (currentIndex > 0) {
View preView = createPageView(currentIndex - 1);
Point leftOffset = getScreenSizeOffset(preView);
int gap = leftOffset.y + GAP + cvOffset.y;
preView.layout(cvLeft,
cvTop - gap - preView.getMeasuredHeight(),
cvRight,
cvBottom - gap - preView.getMeasuredHeight());
preView.layout(cvLeft,
cvTop - gap - preView.getMeasuredHeight(),
cvRight,
cvBottom - gap - preView.getMeasuredHeight());
}
// next page
if (currentIndex + 1 < pageAdapter.getCount())
{
if (currentIndex + 1 < pageAdapter.getCount()) {
View nextView = createPageView(currentIndex + 1);
Point rightOffset = getScreenSizeOffset(nextView);
int gap = cvOffset.y + GAP + rightOffset.y;
nextView.layout(cvLeft,
cvTop + gap + nextView.getMeasuredHeight(),
cvRight,
cvBottom + gap + nextView.getMeasuredHeight());
cvTop + gap + nextView.getMeasuredHeight(),
cvRight,
cvBottom + gap + nextView.getMeasuredHeight());
}
}
/**
*
*
*/
public void onConfigurationChanged(Configuration newConfig)
{
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
isConfigurationChanged = true;
}
/**
* switch page for page index (base 0)
*
*
* @param index
*/
public void showPDFPageForIndex(final int index)
{
if (index < 0 || index >= pageAdapter.getCount())
{
public void showPDFPageForIndex(final int index) {
if (index < 0 || index >= pageAdapter.getCount()) {
return;
}
currentIndex = index;
postDelayed(new Runnable()
{
postDelayed(new Runnable() {
int gotoIndex = index;
/**
*
*/
public void run()
{
if (gotoIndex == currentIndex)
{
*
*/
public void run() {
if (gotoIndex == currentIndex) {
isResetLayout = true;
requestLayout();
}
......@@ -541,32 +462,25 @@ public class APageListView extends AdapterView<Adapter>
}, 1);
pageListViewListener.updateStutus(null);
}
/**
*
*
*/
public void nextPageView()
{
if (currentIndex + 1 >= pageAdapter.getCount())
{
public void nextPageView() {
if (currentIndex + 1 >= pageAdapter.getCount()) {
return;
}
}
APageListItem pageView = childViewsCache.get(currentIndex + 1);
if (pageView != null)
{
if (pageView != null) {
currentIndex++;
eventManage.slideViewOntoScreen(pageView);
}
else
{
postDelayed(new Runnable()
{
} else {
postDelayed(new Runnable() {
/**
*
*/
public void run()
{
isResetLayout = true;
*
*/
public void run() {
isResetLayout = true;
requestLayout();
}
}, 1);
......@@ -575,104 +489,83 @@ public class APageListView extends AdapterView<Adapter>
}
/**
*
*
*/
public void previousPageview()
{
if (currentIndex == 0)
{
public void previousPageview() {
if (currentIndex == 0) {
return;
}
}
APageListItem pageView = childViewsCache.get(currentIndex - 1);
if (pageView != null)
{
if (pageView != null) {
currentIndex--;
eventManage.slideViewOntoScreen(pageView);
}
}
/**
*
*/
public void exportImage(final APageListItem view, final Bitmap srcBitmap)
{
public void exportImage(final APageListItem view, final Bitmap srcBitmap) {
if (view.getPageIndex() != currentIndex || eventManage.isTouchEventIn()
|| !eventManage.isScrollerFinished())
{
|| !eventManage.isScrollerFinished()) {
return;
}
pageListViewListener.exportImage(view, srcBitmap);
}
}
/**
*
* @param x is don't zoom
* @param y is don't zoom
* @param x is don't zoom
* @param y is don't zoom
* @return
*/
public boolean isPointVisibleOnScreen(int x, int y)
{
x = (int)(x * zoom);
y = (int)(y * zoom);
public boolean isPointVisibleOnScreen(int x, int y) {
x = (int) (x * zoom);
y = (int) (y * zoom);
APageListItem item = getCurrentPageView();
if (item == null)
{
if (item == null) {
return false;
}
int left = Math.max(item.getLeft(), 0) - item.getLeft();
int top = Math.max(item.getTop(), 0) - item.getTop();
return left < left + getWidth() && top < top + getHeight()
&& x >= left && x < left + getWidth() && y >= top && y < top + getHeight();
return left < left + getWidth() && top < top + getHeight()
&& x >= left && x < left + getWidth() && y >= top && y < top + getHeight();
}
/**
*
* @param x is don't zoom
* @param y is don't zoom
* @param x is don't zoom
* @param y is don't zoom
* @return
*/
public void setItemPointVisibleOnScreen(int x, int y)
{
if (x < 0 && y < 0)
{
return ;
public void setItemPointVisibleOnScreen(int x, int y) {
if (x < 0 && y < 0) {
return;
}
APageListItem item = getCurrentPageView();
if (item != null && !isPointVisibleOnScreen(x, y))
{
x = (int)(x * zoom);
y = (int)(y * zoom);
if (item != null && !isPointVisibleOnScreen(x, y)) {
x = (int) (x * zoom);
y = (int) (y * zoom);
int cvLeft = 0, cvRight = 0, cvTop = 0, cvBottom = 0;
if (x > 0)
{
if (x + getWidth() > item.getMeasuredWidth())
{
if (x > 0) {
if (x + getWidth() > item.getMeasuredWidth()) {
cvLeft = -(item.getMeasuredWidth() - getWidth());
}
else
{
cvLeft = -x;
} else {
cvLeft = -x;
}
}
if (y > 0)
{
if (y + getHeight() > item.getMeasuredHeight())
{
if (y > 0) {
if (y + getHeight() > item.getMeasuredHeight()) {
cvTop = -(item.getMeasuredHeight() - getHeight());
} else {
cvTop = -y;
}
else
{
cvTop = -y;
}
}
}
// current page
Point cvOffset = getScreenSizeOffset(item);
cvRight = cvLeft + item.getMeasuredWidth();
cvBottom = cvTop + item.getMeasuredHeight();
if (item.getMeasuredHeight() <= getHeight())
{
if (item.getMeasuredHeight() <= getHeight()) {
Point corr = getCorrection(getScrollBounds(cvLeft, cvTop, cvRight, cvBottom));
cvTop += corr.y;
cvBottom += corr.y;
......@@ -680,110 +573,90 @@ public class APageListView extends AdapterView<Adapter>
item.layout(cvLeft, cvTop, cvRight, cvBottom);
// previous page
if (currentIndex > 0)
{
if (currentIndex > 0) {
View preView = childViewsCache.get(currentIndex - 1);
if (preView != null)
{
if (preView != null) {
Point leftOffset = getScreenSizeOffset(preView);
int gap = leftOffset.x + GAP + cvOffset.x;
preView.layout(cvLeft - preView.getMeasuredWidth() - gap,
(cvBottom + cvTop - preView.getMeasuredHeight()) / 2, cvLeft - gap,
(cvBottom + cvTop + preView.getMeasuredHeight()) / 2);
(cvBottom + cvTop - preView.getMeasuredHeight()) / 2, cvLeft - gap,
(cvBottom + cvTop + preView.getMeasuredHeight()) / 2);
}
}
// next page
if (currentIndex + 1 < pageAdapter.getCount())
{
if (currentIndex + 1 < pageAdapter.getCount()) {
View nextView = childViewsCache.get(currentIndex + 1);
if (nextView != null)
{
if (nextView != null) {
Point rightOffset = getScreenSizeOffset(nextView);
int gap = cvOffset.x + GAP + rightOffset.x;
nextView.layout(cvRight + gap,
(cvBottom + cvTop - nextView.getMeasuredHeight()) / 2,
cvRight + nextView.getMeasuredWidth() + gap,
(cvBottom + cvTop + nextView.getMeasuredHeight()) / 2);
(cvBottom + cvTop - nextView.getMeasuredHeight()) / 2,
cvRight + nextView.getMeasuredWidth() + gap,
(cvBottom + cvTop + nextView.getMeasuredHeight()) / 2);
}
}
postRepaint(item);
}
}
/**
*
*
*/
public Object getModel()
{
public Object getModel() {
return pageListViewListener.getModel();
}
/**
*
* @return
*/
public int getDisplayedPageIndex()
{
public int getDisplayedPageIndex() {
return currentIndex;
}
/**
*
*
*/
public void setZoom(float zoom, int pointX, int pointY)
{
public void setZoom(float zoom, int pointX, int pointY) {
setZoom(zoom, pointX, pointY, true);
}
public void setZoom(float zoomValue, final boolean isRepaint)
{
public void setZoom(float zoomValue, final boolean isRepaint) {
setZoom(zoomValue, Integer.MIN_VALUE, Integer.MIN_VALUE, isRepaint);
}
/**
*
*
*/
public void setZoom(float zoomValue, int pointX, int pointY, final boolean isRepaint)
{
if ((int)(zoomValue * MainConstant.ZOOM_ROUND) == (int)(this.zoom * MainConstant.ZOOM_ROUND))
{
public void setZoom(float zoomValue, int pointX, int pointY, final boolean isRepaint) {
if ((int) (zoomValue * MainConstant.ZOOM_ROUND) == (int) (this.zoom * MainConstant.ZOOM_ROUND)) {
return;
}
}
isInitZoom = true;
if(pointX == Integer.MIN_VALUE && pointY == Integer.MIN_VALUE)
{
if (pointX == Integer.MIN_VALUE && pointY == Integer.MIN_VALUE) {
pointX = getWidth() / 2;
pointY = getHeight() / 2;
}
float oldZoom = zoom;
zoom = zoomValue;
pageListViewListener.changeZoom();
post(new Runnable()
{
@ Override
public void run()
{
if (isRepaint)
{
post(new Runnable() {
@Override
public void run() {
if (isRepaint) {
APageListItem pageView = getCurrentPageView();
if (pageView != null)
{
if (pageView != null) {
postRepaint(pageView);
}
}
}
});
if (isRepaint)
{
if (isRepaint) {
APageListItem v = getCurrentPageView();
int left = 0;
int top = 0;
if (v != null)
{
if (v != null) {
left = v.getLeft();
top = v.getTop();
}
......@@ -792,287 +665,233 @@ public class APageListView extends AdapterView<Adapter>
int viewFocusX = pointX - (left + eventManage.getScrollX());
int viewFocusY = pointY - (top + eventManage.getScrollY());
// Scroll to maintain the focus point
eventManage.setScrollAxisValue((int)(viewFocusX - viewFocusX * factor),
(int)(viewFocusY - viewFocusY * factor));
eventManage.setScrollAxisValue((int) (viewFocusX - viewFocusX * factor),
(int) (viewFocusY - viewFocusY * factor));
requestLayout();
}
}
/**
* set fit size for PPT,Word view mode, PDf
*
* @param value fit size mode
* = 0, fit size of get minimum value of pageWidth / viewWidth and pageHeight / viewHeight;
* = 1, fit size of pageWidth
* = 2, fit size of PageHeight
*
* @param value fit size mode
* = 0, fit size of get minimum value of pageWidth / viewWidth and pageHeight / viewHeight;
* = 1, fit size of pageWidth
* = 2, fit size of PageHeight
*/
public void setFitSize(int value)
{
public void setFitSize(int value) {
setZoom(getFitZoom(value), true);
postInvalidate();
}
/**
* get fit size statue
*
*
* @return fit size statue
* = 0, left/right and top/bottom don't alignment
* = 1, top/bottom alignment
* = 2, left/right alignment
* = 3, left/right and top/bottom alignment
*/
public int getFitSizeState()
{
* = 0, left/right and top/bottom don't alignment
* = 1, top/bottom alignment
* = 2, left/right alignment
* = 3, left/right and top/bottom alignment
*/
public int getFitSizeState() {
int state = 0;
APageListItem item = getCurrentPageView();
if (item != null)
{
if (item != null) {
int w = Math.abs(item.getWidth() - getWidth());
int h = Math.abs(item.getHeight() - getHeight());
// left/right and top/bottom alignment
if (w < 2 && h < 2)
{
if (w < 2 && h < 2) {
state = 3;
}
// left/right alignment
else if (w < 2 && h >= 2)
{
else if (w < 2 && h >= 2) {
state = 2;
}
// top/bottom alignment
else if (w >= 2 && h < 2)
{
else if (w >= 2 && h < 2) {
state = 1;
}
}
return state;
}
/**
*
*
*/
public float getZoom()
{
public float getZoom() {
return zoom;
}
/**
*
*
*/
public float getFitZoom()
{
public float getFitZoom() {
return getFitZoom(0);
}
/**
*
*
*/
public float getFitZoom(int value)
{
if (currentIndex < 0 || currentIndex >= pageListViewListener.getPageCount())
{
public float getFitZoom(int value) {
if (currentIndex < 0 || currentIndex >= pageListViewListener.getPageCount()) {
return 1.0f;
}
Rect rect = pageListViewListener.getPageSize(currentIndex);
int viewWidth = getWidth();
int viewHeight = getHeight();
ViewParent v = getParent();
while (viewWidth == 0 && v != null)
{
if (v == null || !(v instanceof View))
{
while (viewWidth == 0 && v != null) {
if (v == null || !(v instanceof View)) {
break;
}
viewWidth = ((View)v).getWidth();
viewHeight = ((View)v).getHeight();
viewWidth = ((View) v).getWidth();
viewHeight = ((View) v).getHeight();
v = v.getParent();
}
if (viewWidth == 0 || viewHeight == 0)
{
if (viewWidth == 0 || viewHeight == 0) {
return 1.0f;
}
float maxZoom = MainConstant.MAXZOOM / MainConstant.STANDARD_RATE;
if (value == 0)
{
if(!pageListViewListener.isIgnoreOriginalSize())
{
return Math.min(Math.min(viewWidth / (float)rect.width(), viewHeight / (float)rect.height()), 1.0f);
if (value == 0) {
if (!pageListViewListener.isIgnoreOriginalSize()) {
return Math.min(Math.min(viewWidth / (float) rect.width(), viewHeight / (float) rect.height()), 1.0f);
} else {
return Math.min(Math.min(viewWidth / (float) rect.width(), viewHeight / (float) rect.height()), maxZoom);
}
else
{
return Math.min(Math.min(viewWidth / (float)rect.width(), viewHeight / (float)rect.height()), maxZoom);
}
}
else if (value == 1)
{
return Math.min(viewWidth / (float)rect.width(), maxZoom);
}
else if (value == 2)
{
return Math.min(viewHeight / (float)rect.height(), maxZoom);
} else if (value == 1) {
return Math.min(viewWidth / (float) rect.width(), maxZoom);
} else if (value == 2) {
return Math.min(viewHeight / (float) rect.height(), maxZoom);
}
return 1.0f;
}
/**
* get current display page number (base 1)
*
*
* @return page number (base 1)
*/
public int getCurrentPageNumber()
{
public int getCurrentPageNumber() {
return currentIndex + 1;
}
/**
*
* @see android.widget.AdapterView#getAdapter()
*
*/
@ Override
public Adapter getAdapter()
{
@Override
public Adapter getAdapter() {
return pageAdapter;
}
/**
*
* @see android.widget.AdapterView#setAdapter(android.widget.Adapter)
*
*/
@ Override
public void setAdapter(Adapter adapter)
{
@Override
public void setAdapter(Adapter adapter) {
this.pageAdapter = adapter;
}
/**
*
*(non-Javadoc)
* @see android.widget.AdapterView#getSelectedView()
* (non-Javadoc)
*
* @see android.widget.AdapterView#getSelectedView()
*/
@ Override
public View getSelectedView()
{
@Override
public View getSelectedView() {
return null;
}
/**
*
* @see android.widget.AdapterView#setSelection(int)
*
*/
@ Override
public void setSelection(int position)
{
@Override
public void setSelection(int position) {
}
/**
*
* @param v
*
*/
protected void postUnRepaint(final APageListItem view)
{
if (view == null)
{
protected void postUnRepaint(final APageListItem view) {
if (view == null) {
return;
}
post(new Runnable()
{
public void run()
{
post(new Runnable() {
public void run() {
view.removeRepaintImageView();
}
});
}
/**
*
* @param v
*
*/
public void postRepaint(final APageListItem view)
{
if (view == null)
{
public void postRepaint(final APageListItem view) {
if (view == null) {
return;
}
post(new Runnable()
{
public void run()
{
post(new Runnable() {
public void run() {
view.addRepaintImageView(null);
}
});
}
/**
*
* @param i
* @return
*/
public APageListItem getCurrentPageView()
{
if (childViewsCache != null)
{
public APageListItem getCurrentPageView() {
if (childViewsCache != null) {
return childViewsCache.get(currentIndex);
}
return null;
return null;
}
/**
*
*
*/
protected IPageListViewListener getPageListViewListener()
{
protected IPageListViewListener getPageListViewListener() {
return this.pageListViewListener;
}
/**
*
* @param i
* @return
*/
private APageListItem createPageView(int pageIndex)
{
private APageListItem createPageView(int pageIndex) {
APageListItem pageView = childViewsCache.get(pageIndex);
if (pageView == null)
{
pageView = (APageListItem)pageAdapter.getView(pageIndex,
(pageViewCache.size() == 0 ? null : pageViewCache.removeFirst()), this);
if (pageView == null) {
pageView = (APageListItem) pageAdapter.getView(pageIndex,
(pageViewCache.size() == 0 ? null : pageViewCache.removeFirst()), this);
LayoutParams params = pageView.getLayoutParams();
if (params == null)
{
if (params == null) {
params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
}
addViewInLayout(pageView, 0, params, true);
// Record the view against it's adapter index
childViewsCache.append(pageIndex, pageView);
// 计算page的size
pageView.measure(View.MeasureSpec.EXACTLY | (int)(pageView.getPageWidth() * zoom),
View.MeasureSpec.EXACTLY | (int)(pageView.getPageHeight() * zoom));
pageView.measure(View.MeasureSpec.EXACTLY | (int) (pageView.getPageWidth() * zoom),
View.MeasureSpec.EXACTLY | (int) (pageView.getPageHeight() * zoom));
}
return pageView;
}
/**
*
* @param left
* @param top
* @param right
* @param bottom
* @return
*/
protected Rect getScrollBounds(int left, int top, int right, int bottom)
{
protected Rect getScrollBounds(int left, int top, int right, int bottom) {
int xmin = getWidth() - right;
int xmax = -left;
int ymin = getHeight() - bottom;
......@@ -1080,12 +899,10 @@ public class APageListView extends AdapterView<Adapter>
// In either dimension, if view smaller than screen then
// constrain it to be central
if (xmin > xmax)
{
if (xmin > xmax) {
xmin = xmax = (xmin + xmax) / 2;
}
if (ymin > ymax)
{
if (ymin > ymax) {
ymin = ymax = (ymin + ymax) / 2;
}
......@@ -1093,123 +910,104 @@ public class APageListView extends AdapterView<Adapter>
}
/**
*
* @param v
* @return
*/
protected Rect getScrollBounds(View v)
{
protected Rect getScrollBounds(View v) {
// There can be scroll amounts not yet accounted for in
// onLayout, so add mXScroll and mYScroll to the current
// positions when calculating the bounds.
return getScrollBounds(v.getLeft() + eventManage.getScrollX(),
v.getTop() + eventManage.getScrollY(),
v.getLeft() + v.getMeasuredWidth() + eventManage.getScrollX(),
v.getTop() + v.getMeasuredHeight() + eventManage.getScrollY());
return getScrollBounds(v.getLeft() + eventManage.getScrollX(),
v.getTop() + eventManage.getScrollY(),
v.getLeft() + v.getMeasuredWidth() + eventManage.getScrollX(),
v.getTop() + v.getMeasuredHeight() + eventManage.getScrollY());
}
/**
*
* @param bounds
* @return
*/
protected Point getCorrection(Rect bounds)
{
return new Point(Math.min(Math.max(0, bounds.left), bounds.right),
Math.min(Math.max(0, bounds.top), bounds.bottom));
protected Point getCorrection(Rect bounds) {
return new Point(Math.min(Math.max(0, bounds.left), bounds.right),
Math.min(Math.max(0, bounds.top), bounds.bottom));
}
/**
*
* @param v
* @return
*/
protected Point getScreenSizeOffset(View v)
{
return new Point(Math.max((getWidth() - v.getMeasuredWidth()) / 2, 0),
Math.max((getHeight() - v.getMeasuredHeight()) / 2, 0));
protected Point getScreenSizeOffset(View v) {
return new Point(Math.max((getWidth() - v.getMeasuredWidth()) / 2, 0),
Math.max((getHeight() - v.getMeasuredHeight()) / 2, 0));
}
/**
*
*
*/
public int getPageCount()
{
public int getPageCount() {
return pageListViewListener.getPageCount();
}
/**
*
*
*/
protected APageListItem getPageListItem(int position, View convertView, ViewGroup parent)
{
protected APageListItem getPageListItem(int position, View convertView, ViewGroup parent) {
return pageListViewListener.getPageListItem(position, convertView, parent);
}
/**
*
*
*/
public boolean isInit()
{
public boolean isInit() {
return this.isInit;
}
/**
*
*
*/
public void setDoRequstLayout(boolean b)
{
public void setDoRequstLayout(boolean b) {
this.isDoRequestLayout = b;
}
public boolean isInitZoom()
{
public boolean isInitZoom() {
return isInitZoom;
}
public void setInitZoom(boolean isInitZoom)
{
public void setInitZoom(boolean isInitZoom) {
this.isInitZoom = isInitZoom;
}
/**
*
*
*/
public void dispose()
{
public void dispose() {
pageListViewListener = null;
if (eventManage != null)
{
if (eventManage != null) {
eventManage.dispose();
eventManage = null;
}
if (pageAdapter instanceof APageListAdapter)
{
((APageListAdapter)pageAdapter).dispose();
if (pageAdapter instanceof APageListAdapter) {
((APageListAdapter) pageAdapter).dispose();
pageAdapter = null;
}
if (childViewsCache != null)
{
if (childViewsCache != null) {
int size = childViewsCache.size();
for (int i = 0; i < size; i++)
{
for (int i = 0; i < size; i++) {
childViewsCache.valueAt(i).dispose();
}
childViewsCache.clear();
childViewsCache = null;
}
if (pageViewCache != null)
{
for (APageListItem page : pageViewCache)
{
if (pageViewCache != null) {
for (APageListItem page : pageViewCache) {
page.dispose();
}
pageViewCache.clear();
pageViewCache = null;
}
}
//
private boolean isDoRequestLayout = true;
//
......@@ -1223,7 +1021,7 @@ public class APageListView extends AdapterView<Adapter>
//
private float zoom = 1.0f;
// Adapter's index for the current view (base 0)
private int currentIndex;
private int currentIndex;
//
private IPageListViewListener pageListViewListener;
//
......
......@@ -161,4 +161,6 @@ public interface IPageListViewListener
* page list view moving position
*/
public int getPageListViewMovingPosition();
public void singleTab();
}
......@@ -434,6 +434,11 @@ public class PrintWord extends FrameLayout implements IPageListViewListener {
return control.getMainFrame().getPageListViewMovingPosition();
}
@Override
public void singleTab() {
}
/**
*
*/
......
......@@ -39,7 +39,6 @@ import com.cherry.lib.doc.office.system.beans.AEventManage;
*/
public class WPEventManage extends AEventManage {
/**
* @param spreadsheet
*/
public WPEventManage(Word word, IControl control) {
super(word.getContext(), control);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment