summaryrefslogtreecommitdiff
path: root/src/org
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2012-10-17 14:21:48 +0400
committerAndrew Dolgov <[email protected]>2012-10-17 14:21:48 +0400
commit7a3c544825e7c6c7fe3af8b947f2ea463b4723cb (patch)
tree5119a4230de29bafb3568245e902dfaefa3a1985 /src/org
parent8ef5f5aa357aac7d3be22604c95ebed1597c6d55 (diff)
switch to ImageViewTouch
Diffstat (limited to 'src/org')
-rw-r--r--src/org/fox/ttcomics/ComicFragment.java18
-rw-r--r--src/org/fox/ttcomics/TouchImageView.java269
2 files changed, 10 insertions, 277 deletions
diff --git a/src/org/fox/ttcomics/ComicFragment.java b/src/org/fox/ttcomics/ComicFragment.java
index 4acd732..2221b3a 100644
--- a/src/org/fox/ttcomics/ComicFragment.java
+++ b/src/org/fox/ttcomics/ComicFragment.java
@@ -1,5 +1,7 @@
package org.fox.ttcomics;
+import it.sephiroth.android.library.imagezoom.ImageViewTouch;
+
import java.io.IOException;
import java.io.InputStream;
@@ -16,6 +18,7 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
+import android.widget.ImageView.ScaleType;
import android.widget.TextView;
public class ComicFragment extends Fragment {
@@ -66,7 +69,7 @@ public class ComicFragment extends Fragment {
View view = inflater.inflate(R.layout.fragment_comic, container, false);
- TouchImageView image = (TouchImageView) view.findViewById(R.id.comic_image);
+ ImageViewTouch image = (ImageViewTouch) view.findViewById(R.id.comic_image);
if (savedInstanceState != null) {
m_page = savedInstanceState.getInt("page");
@@ -79,10 +82,9 @@ public class ComicFragment extends Fragment {
image.setBackgroundColor(0xff000000);
}
-
+ image.setFitToScreen(true);
image.setImageBitmap(loadImage(pager.getArchive(), m_page));
- image.setMaxZoom(4f);
- image.setOnScaleChangedListener(new TouchImageView.OnScaleChangedListener() {
+ image.setOnScaleChangedListener(new ImageViewTouch.OnScaleChangedListener() {
@Override
public void onScaleChanged(float scale) {
ViewPager pager = (ViewPager) getActivity().findViewById(R.id.comics_pager);
@@ -91,9 +93,9 @@ public class ComicFragment extends Fragment {
pager.setPagingEnabled(scale - 1.0f < 0.01);
}
}
- });
+ });
- image.setCustomOnTouchListener(new View.OnTouchListener() {
+ image.setOnTouchListener(new View.OnTouchListener() {
int m_x;
int m_y;
@@ -121,9 +123,9 @@ public class ComicFragment extends Fragment {
}
return false;
}
- });
+ });
- }
+ }
TextView page = (TextView) view.findViewById(R.id.comic_page);
diff --git a/src/org/fox/ttcomics/TouchImageView.java b/src/org/fox/ttcomics/TouchImageView.java
deleted file mode 100644
index 9a9efe6..0000000
--- a/src/org/fox/ttcomics/TouchImageView.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * TouchImageView.java
- * By: Michael Ortiz
- * Updated By: Patrick Lackemacher
- * -------------------
- * Extends Android ImageView to include pinch zooming and panning.
- */
-
-package org.fox.ttcomics;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Matrix;
-import android.graphics.PointF;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.MotionEvent;
-import android.view.ScaleGestureDetector;
-import android.view.View;
-import android.widget.ImageView;
-
-public class TouchImageView extends ImageView {
-
- public interface OnScaleChangedListener {
- public void onScaleChanged(float scale);
- }
-
- OnScaleChangedListener mScaleChangedListener;
- View.OnTouchListener mCustomOnTouchListener;
-
- Matrix matrix = new Matrix();
-
- // We can be in one of these 3 states
- static final int NONE = 0;
- static final int DRAG = 1;
- static final int ZOOM = 2;
- int mode = NONE;
-
- // Remember some things for zooming
- PointF last = new PointF();
- PointF start = new PointF();
- float minScale = 1f;
- float maxScale = 3f;
- float[] m;
-
- float redundantXSpace, redundantYSpace;
-
- float width, height;
- static final int CLICK = 3;
- float saveScale = 1f;
- float right, bottom, origWidth, origHeight, bmWidth, bmHeight;
-
- ScaleGestureDetector mScaleDetector;
-
- Context context;
-
- public TouchImageView(Context context) {
- super(context);
- sharedConstructing(context);
- }
-
- public TouchImageView(Context context, AttributeSet attrs) {
- super(context, attrs);
- sharedConstructing(context);
- }
-
- private void sharedConstructing(Context context) {
- super.setClickable(true);
- this.context = context;
- mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
- matrix.setTranslate(1f, 1f);
- m = new float[9];
- setImageMatrix(matrix);
- setScaleType(ScaleType.MATRIX);
-
- setOnTouchListener(new OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- mScaleDetector.onTouchEvent(event);
-
- matrix.getValues(m);
- float x = m[Matrix.MTRANS_X];
- float y = m[Matrix.MTRANS_Y];
- PointF curr = new PointF(event.getX(), event.getY());
-
- switch (event.getAction()) {
- case MotionEvent.ACTION_DOWN:
- last.set(event.getX(), event.getY());
- start.set(last);
- mode = DRAG;
- break;
- case MotionEvent.ACTION_MOVE:
- if (mode == DRAG) {
- float deltaX = curr.x - last.x;
- float deltaY = curr.y - last.y;
- float scaleWidth = Math.round(origWidth * saveScale);
- float scaleHeight = Math.round(origHeight * saveScale);
- if (scaleWidth < width) {
- deltaX = 0;
- if (y + deltaY > 0)
- deltaY = -y;
- else if (y + deltaY < -bottom)
- deltaY = -(y + bottom);
- } else if (scaleHeight < height) {
- deltaY = 0;
- if (x + deltaX > 0)
- deltaX = -x;
- else if (x + deltaX < -right)
- deltaX = -(x + right);
- } else {
- if (x + deltaX > 0)
- deltaX = -x;
- else if (x + deltaX < -right)
- deltaX = -(x + right);
-
- if (y + deltaY > 0)
- deltaY = -y;
- else if (y + deltaY < -bottom)
- deltaY = -(y + bottom);
- }
- matrix.postTranslate(deltaX, deltaY);
- last.set(curr.x, curr.y);
- }
- break;
-
- case MotionEvent.ACTION_UP:
- mode = NONE;
- int xDiff = (int) Math.abs(curr.x - start.x);
- int yDiff = (int) Math.abs(curr.y - start.y);
- if (xDiff < CLICK && yDiff < CLICK)
- performClick();
- break;
-
- case MotionEvent.ACTION_POINTER_UP:
- mode = NONE;
- break;
- }
- setImageMatrix(matrix);
- invalidate();
-
- if (mCustomOnTouchListener != null) {
- mCustomOnTouchListener.onTouch(v, event);
- }
-
- return true; // indicate event was handled
- }
-
- });
- }
-
- @Override
- public void setImageBitmap(Bitmap bm) {
- super.setImageBitmap(bm);
- if(bm != null) {
- bmWidth = bm.getWidth();
- bmHeight = bm.getHeight();
- }
- }
-
- public void setMaxZoom(float x)
- {
- maxScale = x;
- }
-
- private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
- @Override
- public boolean onScaleBegin(ScaleGestureDetector detector) {
- mode = ZOOM;
- return true;
- }
-
- @Override
- public boolean onScale(ScaleGestureDetector detector) {
- float mScaleFactor = detector.getScaleFactor();
- float origScale = saveScale;
- saveScale *= mScaleFactor;
- if (saveScale > maxScale) {
- saveScale = maxScale;
- mScaleFactor = maxScale / origScale;
- } else if (saveScale < minScale) {
- saveScale = minScale;
- mScaleFactor = minScale / origScale;
- }
- right = width * saveScale - width - (2 * redundantXSpace * saveScale);
- bottom = height * saveScale - height - (2 * redundantYSpace * saveScale);
- if (origWidth * saveScale <= width || origHeight * saveScale <= height) {
- matrix.postScale(mScaleFactor, mScaleFactor, width / 2, height / 2);
- if (mScaleFactor < 1) {
- matrix.getValues(m);
- float x = m[Matrix.MTRANS_X];
- float y = m[Matrix.MTRANS_Y];
- if (mScaleFactor < 1) {
- if (Math.round(origWidth * saveScale) < width) {
- if (y < -bottom)
- matrix.postTranslate(0, -(y + bottom));
- else if (y > 0)
- matrix.postTranslate(0, -y);
- } else {
- if (x < -right)
- matrix.postTranslate(-(x + right), 0);
- else if (x > 0)
- matrix.postTranslate(-x, 0);
- }
- }
- }
- } else {
- matrix.postScale(mScaleFactor, mScaleFactor, detector.getFocusX(), detector.getFocusY());
- matrix.getValues(m);
- float x = m[Matrix.MTRANS_X];
- float y = m[Matrix.MTRANS_Y];
- if (mScaleFactor < 1) {
- if (x < -right)
- matrix.postTranslate(-(x + right), 0);
- else if (x > 0)
- matrix.postTranslate(-x, 0);
- if (y < -bottom)
- matrix.postTranslate(0, -(y + bottom));
- else if (y > 0)
- matrix.postTranslate(0, -y);
- }
- }
-
- if (mScaleChangedListener != null) {
- mScaleChangedListener.onScaleChanged(saveScale);
- }
-
- return true;
-
- }
- }
-
- @Override
- protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
- {
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- width = MeasureSpec.getSize(widthMeasureSpec);
- height = MeasureSpec.getSize(heightMeasureSpec);
- //Fit to screen.
- float scale;
- float scaleX = (float)width / (float)bmWidth;
- float scaleY = (float)height / (float)bmHeight;
- scale = Math.min(scaleX, scaleY);
- matrix.setScale(scale, scale);
- setImageMatrix(matrix);
- saveScale = 1f;
-
- // Center the image
- redundantYSpace = (float)height - (scale * (float)bmHeight) ;
- redundantXSpace = (float)width - (scale * (float)bmWidth);
- redundantYSpace /= (float)2;
- redundantXSpace /= (float)2;
-
- matrix.postTranslate(redundantXSpace, redundantYSpace);
-
- origWidth = width - 2 * redundantXSpace;
- origHeight = height - 2 * redundantYSpace;
- right = width * saveScale - width - (2 * redundantXSpace * saveScale);
- bottom = height * saveScale - height - (2 * redundantYSpace * saveScale);
- setImageMatrix(matrix);
- }
-
- public void setOnScaleChangedListener(OnScaleChangedListener listener) {
- mScaleChangedListener = listener;
- }
-
- public void setCustomOnTouchListener(View.OnTouchListener listener) {
- mCustomOnTouchListener = listener;
- }
-}