diff --git a/PdfView/src/main/java/net/sf/andpdf/pdfviewer/PdfViewerFragment.java b/PdfView/src/main/java/net/sf/andpdf/pdfviewer/PdfViewerFragment.java index 725fa25..93c7f7b 100644 --- a/PdfView/src/main/java/net/sf/andpdf/pdfviewer/PdfViewerFragment.java +++ b/PdfView/src/main/java/net/sf/andpdf/pdfviewer/PdfViewerFragment.java @@ -7,7 +7,9 @@ import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.graphics.Bitmap; -import android.graphics.RectF; +import android.graphics.Canvas; +import android.graphics.Matrix; +import android.graphics.Paint; import android.os.Bundle; import android.os.Handler; import android.support.annotation.NonNull; @@ -47,6 +49,8 @@ import net.sf.andpdf.refs.HardReference; import java.io.IOException; import java.util.Locale; +import uk.co.senab.photoview.PhotoViewAttacher; + import static android.content.Context.INPUT_METHOD_SERVICE; /** @@ -111,7 +115,7 @@ public class PdfViewerFragment extends Fragment { mGraphView = new GraphView(getActivity()); mGraphView.mBi = mOldGraphView.mBi; mOldGraphView = null; - mGraphView.pdfView.setImageBitmap(mGraphView.mBi); + mGraphView.pdfZoomedImageView.setImageBitmap(mGraphView.mBi); mGraphView.updateTexts(); return mGraphView; } else { @@ -437,7 +441,8 @@ public class PdfViewerFragment extends Fragment { private class GraphView extends FullScrollView { public Bitmap mBi; - public ImageView pdfView; + public ImageView pdfZoomedImageView; + public PhotoViewAttacher photoViewAttacher; public Button mBtPage; private Button mBtPage2; @@ -459,7 +464,8 @@ public class PdfViewerFragment extends Fragment { // remember page button for updates mBtPage2 = mBtPage; - pdfView = new ImageView(context); + pdfZoomedImageView = new ImageView(context); + photoViewAttacher = new PhotoViewAttacher(pdfZoomedImageView); setPageBitmap(null); updateImage(); @@ -470,7 +476,7 @@ public class PdfViewerFragment extends Fragment { // setHorizontalFadingEdgeEnabled(true); // setVerticalScrollBarEnabled(true); // setVerticalFadingEdgeEnabled(true); - addView(pdfView); + addView(pdfZoomedImageView); } private void addNavButtons(ViewGroup vg) { @@ -559,7 +565,8 @@ public class PdfViewerFragment extends Fragment { private void updateImage() { uiHandler.post(new Runnable() { public void run() { - pdfView.setImageBitmap(mBi); + pdfZoomedImageView.setImageBitmap(mBi); + photoViewAttacher.update(); } }); } @@ -601,11 +608,9 @@ public class PdfViewerFragment extends Fragment { mPdfPage = mPdfFile.getPage(page, true); } - float width = mPdfPage.getWidth(); - float height = mPdfPage.getHeight(); - RectF clip = null; - Bitmap bi = mPdfPage.getImage((int) (width * (mGraphView.getWidth() / width)), (int) (height * (mGraphView.getHeight() / height)), clip, true, true); - mGraphView.setPageBitmap(bi); + final Bitmap bitmap = mPdfPage.getImage(mGraphView.getWidth() * 2, mGraphView.getHeight() * 2, null, true, true); + final Bitmap bitmapWithoutQualityLose = getBitmapWithoutQualityLose(bitmap, mGraphView.getWidth(), mGraphView.getHeight()); + mGraphView.setPageBitmap(bitmapWithoutQualityLose); mGraphView.updateImage(); } catch (Throwable e) { Log.e(TAG, e.getMessage(), e); @@ -613,6 +618,26 @@ public class PdfViewerFragment extends Fragment { hideProgressBar(); } + @NonNull + public Bitmap getBitmapWithoutQualityLose(@NonNull final Bitmap bitmap, int newWidth, int newHeight) { + final Bitmap scaledBitmap = Bitmap.createBitmap(newWidth, newHeight, Bitmap.Config.ARGB_8888); + + float ratioX = newWidth / (float) bitmap.getWidth(); + float ratioY = newHeight / (float) bitmap.getHeight(); + float middleX = newWidth / 2.0f; + float middleY = newHeight / 2.0f; + + final Matrix scaleMatrix = new Matrix(); + scaleMatrix.setScale(ratioX, ratioY, middleX, middleY); + + final Canvas canvas = new Canvas(scaledBitmap); + canvas.setMatrix(scaleMatrix); + canvas.drawBitmap(bitmap, middleX - bitmap.getWidth() / 2, middleY - bitmap.getHeight() / 2, new Paint(Paint.FILTER_BITMAP_FLAG)); + + return scaledBitmap; + + } + private void hideProgressBar() { if (progress != null) { progress.dismiss(); @@ -648,6 +673,10 @@ public class PdfViewerFragment extends Fragment { public void onDestroy() { super.onDestroy(); byteArray = null; + if (mGraphView != null) { + mGraphView.mBi = null; + mGraphView.photoViewAttacher.cleanup(); + } } private int getPreviousPageImageResource() { diff --git a/gestureimageview/build.gradle b/gestureimageview/build.gradle deleted file mode 100644 index ba19968..0000000 --- a/gestureimageview/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -apply plugin: 'com.android.library' -android { - compileSdkVersion 23 - buildToolsVersion '23.0.2' - - defaultConfig { - minSdkVersion 7 - targetSdkVersion 7 - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' - } - } -} -dependencies {} \ No newline at end of file diff --git a/gestureimageview/src/main/AndroidManifest.xml b/gestureimageview/src/main/AndroidManifest.xml deleted file mode 100644 index ceae95b..0000000 --- a/gestureimageview/src/main/AndroidManifest.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/gestureimageview/src/main/java/com/polites/android/Animation.java b/gestureimageview/src/main/java/com/polites/android/Animation.java deleted file mode 100644 index 6e3d3bc..0000000 --- a/gestureimageview/src/main/java/com/polites/android/Animation.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2012 Jason Polites - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.polites.android; - -/** - * @author Jason Polites - * - */ -public interface Animation { - - /** - * Transforms the view. - * @param view - * @param diffTime - * @return true if this animation should remain active. False otherwise. - */ - public boolean update(GestureImageView view, long time); - -} diff --git a/gestureimageview/src/main/java/com/polites/android/Animator.java b/gestureimageview/src/main/java/com/polites/android/Animator.java deleted file mode 100644 index fbcb7d2..0000000 --- a/gestureimageview/src/main/java/com/polites/android/Animator.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (c) 2012 Jason Polites - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.polites.android; - - -/** - * @author Jason Polites - * - */ -public class Animator extends Thread { - - private GestureImageView view; - private Animation animation; - private boolean running = false; - private boolean active = false; - private long lastTime = -1L; - - public Animator(GestureImageView view, String threadName) { - super(threadName); - this.view = view; - } - - @Override - public void run() { - - running = true; - - while(running) { - - while(active && animation != null) { - long time = System.currentTimeMillis(); - active = animation.update(view, time - lastTime); - view.redraw(); - lastTime = time; - - while(active) { - try { - if(view.waitForDraw(32)) { // 30Htz - break; - } - } - catch (InterruptedException ignore) { - active = false; - } - } - } - - synchronized(this) { - if(running) { - try { - wait(); - } - catch (InterruptedException ignore) {} - } - } - } - } - - public synchronized void finish() { - running = false; - active = false; - notifyAll(); - } - - public void play(Animation transformer) { - if(active) { - cancel(); - } - this.animation = transformer; - - activate(); - } - - public synchronized void activate() { - lastTime = System.currentTimeMillis(); - active = true; - notifyAll(); - } - - public void cancel() { - active = false; - } -} diff --git a/gestureimageview/src/main/java/com/polites/android/Direction.java b/gestureimageview/src/main/java/com/polites/android/Direction.java deleted file mode 100644 index 83a605b..0000000 --- a/gestureimageview/src/main/java/com/polites/android/Direction.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.polites.android; - -/** - * @author winney E-mail: weiyixiong@tigerbrokers.com - * @version 创建时间: 2015/11/18 下午4:49 - */ -public class Direction { - public final static int LEFT = 1; - public final static int TOP = 2; - public final static int RIGHT = 3; - public final static int BOTTOM = 4; -} diff --git a/gestureimageview/src/main/java/com/polites/android/FlingAnimation.java b/gestureimageview/src/main/java/com/polites/android/FlingAnimation.java deleted file mode 100644 index 66cdca5..0000000 --- a/gestureimageview/src/main/java/com/polites/android/FlingAnimation.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2012 Jason Polites - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.polites.android; - -/** - * @author Jason Polites - * - */ -public class FlingAnimation implements Animation { - - private float velocityX; - private float velocityY; - - private float factor = 0.95f; - - private float threshold = 10; - - private FlingAnimationListener listener; - - /* (non-Javadoc) - * @see com.polites.android.Transformer#update(com.polites.android.GestureImageView, long) - */ - @Override - public boolean update(GestureImageView view, long time) { - float seconds = (float) time / 1000.0f; - - float dx = velocityX * seconds; - float dy = velocityY * seconds; - - velocityX *= factor; - velocityY *= factor; - - boolean active = (Math.abs(velocityX) > threshold && Math.abs(velocityY) > threshold); - - if(listener != null) { - listener.onMove(dx, dy); - - if(!active) { - listener.onComplete(); - } - } - - return active; - } - - public void setVelocityX(float velocityX) { - this.velocityX = velocityX; - } - - public void setVelocityY(float velocityY) { - this.velocityY = velocityY; - } - - public void setFactor(float factor) { - this.factor = factor; - } - - public void setListener(FlingAnimationListener listener) { - this.listener = listener; - } -} diff --git a/gestureimageview/src/main/java/com/polites/android/FlingAnimationListener.java b/gestureimageview/src/main/java/com/polites/android/FlingAnimationListener.java deleted file mode 100644 index b1b38e3..0000000 --- a/gestureimageview/src/main/java/com/polites/android/FlingAnimationListener.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2012 Jason Polites - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.polites.android; - - -/** - * @author Jason Polites - * - */ -public interface FlingAnimationListener { - - public void onMove(float x, float y); - - public void onComplete(); - -} diff --git a/gestureimageview/src/main/java/com/polites/android/FlingListener.java b/gestureimageview/src/main/java/com/polites/android/FlingListener.java deleted file mode 100644 index 1b9b3dc..0000000 --- a/gestureimageview/src/main/java/com/polites/android/FlingListener.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2012 Jason Polites - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.polites.android; - -import android.view.GestureDetector.SimpleOnGestureListener; -import android.view.MotionEvent; - - -/** - * @author Jason Polites - * - */ -public class FlingListener extends SimpleOnGestureListener { - - private float velocityX; - private float velocityY; - - @Override - public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { - this.velocityX = velocityX; - this.velocityY = velocityY; - return true; - } - - public float getVelocityX() { - return velocityX; - } - - public float getVelocityY() { - return velocityY; - } -} diff --git a/gestureimageview/src/main/java/com/polites/android/GestureImageView.java b/gestureimageview/src/main/java/com/polites/android/GestureImageView.java deleted file mode 100644 index dd4d511..0000000 --- a/gestureimageview/src/main/java/com/polites/android/GestureImageView.java +++ /dev/null @@ -1,698 +0,0 @@ -/* - * Copyright (c) 2012 Jason Polites - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.polites.android; - -import android.content.Context; -import android.content.res.Configuration; -import android.database.Cursor; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.ColorFilter; -import android.graphics.Matrix; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.provider.MediaStore; -import android.util.AttributeSet; -import android.util.Log; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewGroup.LayoutParams; -import android.widget.ImageView; -import java.io.InputStream; -import java.util.concurrent.Semaphore; -import java.util.concurrent.TimeUnit; - -public class GestureImageView extends ImageView { - - public static final String GLOBAL_NS = "http://schemas.android.com/apk/res/android"; - public static final String LOCAL_NS = "http://schemas.polites.com/android"; - - private final Semaphore drawLock = new Semaphore(0); - private Animator animator; - - private Drawable drawable; - private int drawableWidth = 0; - private int drawableHeight = 0; - - private float x = 0, y = 0; - - private float scaleAdjust = 1.0f; - private float startingScale = -1.0f; - - private float scale = 1.0f; - private float maxScale = 5.0f; - private float minScale = 0.75f; - private float fitScaleHorizontal = 1.0f; - private float fitScaleVertical = 1.0f; - private float rotation = 0.0f; - - private float centerX; - private float centerY; - - private Float startX, startY; - - private int hWidth; - private int hHeight; - - private int resId = -1; - private boolean recycle = false; - private boolean strict = false; - - private int displayHeight; - private int displayWidth; - - private int alpha = 255; - private ColorFilter colorFilter; - - private int deviceOrientation = -1; - private int imageOrientation; - - private GestureImageViewListener gestureImageViewListener; - private GestureImageViewTouchListener gestureImageViewTouchListener; - private GestureImageViewTouchListener.OnReachBoundListener onReachBoundListener; - - private OnTouchListener customOnTouchListener; - private OnClickListener onClickListener; - - public GestureImageView(Context context, AttributeSet attrs, int defStyle) { - this(context, attrs); - } - - public GestureImageView(Context context, AttributeSet attrs) { - super(context, attrs); - - String scaleType = attrs.getAttributeValue(GLOBAL_NS, "scaleType"); - - if (scaleType == null || scaleType.trim().length() == 0) { - setScaleType(ScaleType.CENTER_INSIDE); - } - - String strStartX = attrs.getAttributeValue(LOCAL_NS, "start-x"); - String strStartY = attrs.getAttributeValue(LOCAL_NS, "start-y"); - - if (strStartX != null && strStartX.trim().length() > 0) { - startX = Float.parseFloat(strStartX); - } - - if (strStartY != null && strStartY.trim().length() > 0) { - startY = Float.parseFloat(strStartY); - } - - setStartingScale(attrs.getAttributeFloatValue(LOCAL_NS, "start-scale", startingScale)); - setMinScale(attrs.getAttributeFloatValue(LOCAL_NS, "min-scale", minScale)); - setMaxScale(attrs.getAttributeFloatValue(LOCAL_NS, "max-scale", maxScale)); - setStrict(attrs.getAttributeBooleanValue(LOCAL_NS, "strict", strict)); - setRecycle(attrs.getAttributeBooleanValue(LOCAL_NS, "recycle", recycle)); - - initImage(); - } - - public GestureImageView(Context context) { - super(context); - setScaleType(ScaleType.CENTER_INSIDE); - initImage(); - } - - @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - if (drawable != null) { - int orientation = getResources().getConfiguration().orientation; - if (orientation == Configuration.ORIENTATION_LANDSCAPE) { - displayHeight = MeasureSpec.getSize(heightMeasureSpec); - - if (getLayoutParams().width == LayoutParams.WRAP_CONTENT) { - float ratio = (float) getImageWidth() / (float) getImageHeight(); - displayWidth = Math.round((float) displayHeight * ratio); - } else { - displayWidth = MeasureSpec.getSize(widthMeasureSpec); - } - } else { - displayWidth = MeasureSpec.getSize(widthMeasureSpec); - - if (getLayoutParams().height == LayoutParams.WRAP_CONTENT) { - float ratio = (float) getImageHeight() / (float) getImageWidth(); - displayHeight = Math.round((float) displayWidth * ratio); - } else { - displayHeight = MeasureSpec.getSize(heightMeasureSpec); - } - } - } else { - displayHeight = MeasureSpec.getSize(heightMeasureSpec); - displayWidth = MeasureSpec.getSize(widthMeasureSpec); - } - if (displayWidth == 0 && getImageWidth() != 0) { - displayWidth = getImageWidth(); - } - if (displayHeight == 0 && getImageHeight() != 0) { - displayHeight = getImageHeight(); - } - - setMeasuredDimension(displayWidth, displayHeight); - } - - @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - super.onLayout(changed, left, top, right, bottom); - setupCanvas(displayWidth, displayHeight, getResources().getConfiguration().orientation); - } - - protected void setupCanvas(int measuredWidth, int measuredHeight, int orientation) { - - if (deviceOrientation != orientation) { - deviceOrientation = orientation; - } - - if (drawable != null) { - int imageWidth = getImageWidth(); - int imageHeight = getImageHeight(); - - hWidth = Math.round(((float) imageWidth / 2.0f)); - hHeight = Math.round(((float) imageHeight / 2.0f)); - - measuredWidth -= (getPaddingLeft() + getPaddingRight()); - measuredHeight -= (getPaddingTop() + getPaddingBottom()); - - computeCropScale(imageWidth, imageHeight, measuredWidth, measuredHeight); - - if (startingScale <= 0.0f) { - computeStartingScale(imageWidth, imageHeight, measuredWidth, measuredHeight); - } - - scaleAdjust = startingScale; - - this.centerX = (float) measuredWidth / 2.0f; - this.centerY = (float) measuredHeight / 2.0f; - - if (startX == null) { - x = centerX; - } else { - x = startX; - } - - if (startY == null) { - y = centerY; - } else { - y = startY; - } - - gestureImageViewTouchListener = new GestureImageViewTouchListener(this, measuredWidth, measuredHeight); - gestureImageViewTouchListener.setOnReachBoundListener(onReachBoundListener); - - if (isLandscape()) { - gestureImageViewTouchListener.setMinScale(minScale * fitScaleHorizontal); - } else { - gestureImageViewTouchListener.setMinScale(minScale * fitScaleVertical); - } - - gestureImageViewTouchListener.setMaxScale(maxScale * startingScale); - - gestureImageViewTouchListener.setFitScaleHorizontal(fitScaleHorizontal); - gestureImageViewTouchListener.setFitScaleVertical(fitScaleVertical); - gestureImageViewTouchListener.setCanvasWidth(measuredWidth); - gestureImageViewTouchListener.setCanvasHeight(measuredHeight); - gestureImageViewTouchListener.setOnClickListener(onClickListener); - - drawable.setBounds(-hWidth, -hHeight, hWidth, hHeight); - - super.setOnTouchListener(new OnTouchListener() { - @Override public boolean onTouch(View v, MotionEvent event) { - if (customOnTouchListener != null) { - customOnTouchListener.onTouch(v, event); - } - return gestureImageViewTouchListener.onTouch(v, event); - } - }); - } - } - - protected void computeCropScale(int imageWidth, int imageHeight, int measuredWidth, int measuredHeight) { - fitScaleHorizontal = (float) measuredWidth / (float) imageWidth; - fitScaleVertical = (float) measuredHeight / (float) imageHeight; - } - - protected void computeStartingScale(int imageWidth, int imageHeight, int measuredWidth, int measuredHeight) { - switch (getScaleType()) { - case CENTER: - // Center the image in the view, but perform no scaling. - startingScale = 1.0f; - break; - - case CENTER_CROP: - // Scale the image uniformly (maintain the image's aspect ratio) so that both dimensions - // (width and height) of the image will be equal to or larger than the corresponding dimension of the view (minus padding). - startingScale = - Math.max((float) measuredHeight / (float) imageHeight, (float) measuredWidth / (float) imageWidth); - break; - - case CENTER_INSIDE: - - // Scale the image uniformly (maintain the image's aspect ratio) so that both dimensions - // (width and height) of the image will be equal to or less than the corresponding dimension of the view (minus padding). - float wRatio = (float) imageWidth / (float) measuredWidth; - float hRatio = (float) imageHeight / (float) measuredHeight; - - if (wRatio > hRatio) { - startingScale = fitScaleHorizontal; - } else { - startingScale = fitScaleVertical; - } - - break; - } - } - - protected boolean isRecycled() { - if (drawable != null && drawable instanceof BitmapDrawable) { - Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); - if (bitmap != null) { - return bitmap.isRecycled(); - } - } - return false; - } - - protected void recycle() { - if (recycle && drawable != null && drawable instanceof BitmapDrawable) { - Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); - if (bitmap != null) { - bitmap.recycle(); - } - } - } - - @Override protected void onDraw(Canvas canvas) { - if (true) { - if (drawable != null && !isRecycled()) { - if (drawableHeight == 0 && drawableWidth == 0) { - return; - } - canvas.save(); - - float adjustedScale = scale * scaleAdjust; - - canvas.translate(x, y); - - if (rotation != 0.0f) { - canvas.rotate(rotation); - } - - if (adjustedScale != 1.0f) { - canvas.scale(adjustedScale, adjustedScale); - } - //drawable.setBounds(0, 0, drawableWidth, drawableHeight); - drawable.draw(canvas); - - canvas.restore(); - } - - if (drawLock.availablePermits() <= 0) { - drawLock.release(); - } - } - } - - /** - * Waits for a draw - * - * @param max time to wait for draw (ms) - * @throws InterruptedException - */ - public boolean waitForDraw(long timeout) throws InterruptedException { - return drawLock.tryAcquire(timeout, TimeUnit.MILLISECONDS); - } - - @Override protected void onAttachedToWindow() { - animator = new Animator(this, "GestureImageViewAnimator"); - animator.start(); - - if (resId >= 0 && drawable == null) { - setImageResource(resId); - } - - super.onAttachedToWindow(); - } - - public void animationStart(Animation animation) { - if (animator != null) { - animator.play(animation); - } - } - - public void animationStop() { - if (animator != null) { - animator.cancel(); - } - } - - @Override protected void onDetachedFromWindow() { - if (animator != null) { - animator.finish(); - } - if (recycle && drawable != null && !isRecycled()) { - recycle(); - drawable = null; - } - super.onDetachedFromWindow(); - } - - protected void initImage() { - if (this.drawable != null) { - drawableWidth = drawable.getIntrinsicWidth(); - drawableHeight = drawable.getIntrinsicHeight(); - this.drawable.setAlpha(alpha); - this.drawable.setFilterBitmap(true); - if (colorFilter != null) { - this.drawable.setColorFilter(colorFilter); - } - } - - requestLayout(); - redraw(); - } - - public void setImageBitmap(Bitmap image) { - this.drawable = new BitmapDrawable(getResources(), image); - initImage(); - } - - @Override public void setImageDrawable(Drawable drawable) { - this.drawable = drawable; - initImage(); - } - - public void setImageResource(int id) { - if (this.drawable != null) { - this.recycle(); - } - if (id >= 0) { - this.resId = id; - setImageDrawable(getContext().getResources().getDrawable(id)); - } - } - - public int getScaledWidth() { - return Math.round(getImageWidth() * getScale()); - } - - public int getScaledHeight() { - return Math.round(getImageHeight() * getScale()); - } - - public int getImageWidth() { - if (drawable != null) { - return drawable.getIntrinsicWidth(); - } - return 0; - } - - public int getImageHeight() { - if (drawable != null) { - return drawable.getIntrinsicHeight(); - } - return 0; - } - - public void moveBy(float x, float y) { - this.x += x; - this.y += y; - } - - public void setPosition(float x, float y) { - this.x = x; - this.y = y; - } - - public void redraw() { - postInvalidate(); - } - - public void setMinScale(float min) { - this.minScale = min; - if (gestureImageViewTouchListener != null) { - gestureImageViewTouchListener.setMinScale(min * fitScaleHorizontal); - } - } - - public void setMaxScale(float max) { - this.maxScale = max; - if (gestureImageViewTouchListener != null) { - gestureImageViewTouchListener.setMaxScale(max * startingScale); - } - } - - public void setScale(float scale) { - scaleAdjust = scale; - } - - public float getScale() { - return scaleAdjust; - } - - public float getImageX() { - return x; - } - - public float getImageY() { - return y; - } - - public boolean isStrict() { - return strict; - } - - public void setStrict(boolean strict) { - this.strict = strict; - } - - public boolean isRecycle() { - return recycle; - } - - public void setRecycle(boolean recycle) { - this.recycle = recycle; - } - - public void reset() { - x = centerX; - y = centerY; - scaleAdjust = startingScale; - if (gestureImageViewTouchListener != null) { - gestureImageViewTouchListener.reset(); - } - redraw(); - } - - public void setRotation(float rotation) { - this.rotation = rotation; - } - - public void setGestureImageViewListener(GestureImageViewListener pinchImageViewListener) { - this.gestureImageViewListener = pinchImageViewListener; - } - - public GestureImageViewListener getGestureImageViewListener() { - return gestureImageViewListener; - } - - @Override public Drawable getDrawable() { - return drawable; - } - - @Override public void setAlpha(int alpha) { - this.alpha = alpha; - if (drawable != null) { - drawable.setAlpha(alpha); - } - } - - @Override public void setColorFilter(ColorFilter cf) { - this.colorFilter = cf; - if (drawable != null) { - drawable.setColorFilter(cf); - } - } - - @Override public void setImageURI(Uri mUri) { - if ("content".equals(mUri.getScheme())) { - try { - String[] orientationColumn = { MediaStore.Images.Media.ORIENTATION }; - - Cursor cur = getContext().getContentResolver().query(mUri, orientationColumn, null, null, null); - - if (cur != null && cur.moveToFirst()) { - imageOrientation = cur.getInt(cur.getColumnIndex(orientationColumn[0])); - } - - InputStream in = null; - - try { - in = getContext().getContentResolver().openInputStream(mUri); - Bitmap bmp = BitmapFactory.decodeStream(in); - - if (imageOrientation != 0) { - Matrix m = new Matrix(); - m.postRotate(imageOrientation); - Bitmap rotated = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), m, true); - bmp.recycle(); - setImageDrawable(new BitmapDrawable(getResources(), rotated)); - } else { - setImageDrawable(new BitmapDrawable(getResources(), bmp)); - } - } finally { - if (in != null) { - in.close(); - } - - if (cur != null) { - cur.close(); - } - } - } catch (Exception e) { - Log.w("GestureImageView", "Unable to open content: " + mUri, e); - } - } else { - setImageDrawable(Drawable.createFromPath(mUri.toString())); - } - - if (drawable == null) { - Log.e("GestureImageView", "resolveUri failed on bad bitmap uri: " + mUri); - // Don't try again. - mUri = null; - } - } - - @Override public Matrix getImageMatrix() { - if (strict) { - throw new UnsupportedOperationException("Not supported"); - } - return super.getImageMatrix(); - } - - @Override public void setScaleType(ScaleType scaleType) { - if (scaleType == ScaleType.CENTER || - scaleType == ScaleType.CENTER_CROP || - scaleType == ScaleType.CENTER_INSIDE) { - - super.setScaleType(scaleType); - } else if (strict) { - throw new UnsupportedOperationException("Not supported"); - } - } - - @Override public void invalidateDrawable(Drawable dr) { - if (strict) { - throw new UnsupportedOperationException("Not supported"); - } - super.invalidateDrawable(dr); - } - - @Override public int[] onCreateDrawableState(int extraSpace) { - if (strict) { - throw new UnsupportedOperationException("Not supported"); - } - return super.onCreateDrawableState(extraSpace); - } - - @Override public void setAdjustViewBounds(boolean adjustViewBounds) { - if (strict) { - throw new UnsupportedOperationException("Not supported"); - } - super.setAdjustViewBounds(adjustViewBounds); - } - - @Override public void setImageLevel(int level) { - if (strict) { - throw new UnsupportedOperationException("Not supported"); - } - super.setImageLevel(level); - } - - @Override public void setImageMatrix(Matrix matrix) { - if (strict) { - throw new UnsupportedOperationException("Not supported"); - } - } - - @Override public void setImageState(int[] state, boolean merge) { - if (strict) { - throw new UnsupportedOperationException("Not supported"); - } - } - - @Override public void setSelected(boolean selected) { - if (strict) { - throw new UnsupportedOperationException("Not supported"); - } - super.setSelected(selected); - } - - @Override public void setOnTouchListener(OnTouchListener l) { - this.customOnTouchListener = l; - } - - public void setOnReachBoundListener(GestureImageViewTouchListener.OnReachBoundListener onReachBoundListener) { - this.onReachBoundListener = onReachBoundListener; - } - - public float getCenterX() { - return centerX; - } - - public float getCenterY() { - return centerY; - } - - public boolean isLandscape() { - return getImageWidth() >= getImageHeight(); - } - - public boolean isPortrait() { - return getImageWidth() <= getImageHeight(); - } - - public void setStartingScale(float startingScale) { - this.startingScale = startingScale; - } - - public void setStartingPosition(float x, float y) { - this.startX = x; - this.startY = y; - } - - @Override public void setOnClickListener(OnClickListener l) { - this.onClickListener = l; - - if (gestureImageViewTouchListener != null) { - gestureImageViewTouchListener.setOnClickListener(l); - } - } - - /** - * Returns true if the image dimensions are aligned with the orientation of the device. - */ - public boolean isOrientationAligned() { - if (deviceOrientation == Configuration.ORIENTATION_LANDSCAPE) { - return isLandscape(); - } else if (deviceOrientation == Configuration.ORIENTATION_PORTRAIT) { - return isPortrait(); - } - return true; - } - - public int getDeviceOrientation() { - return deviceOrientation; - } -} diff --git a/gestureimageview/src/main/java/com/polites/android/GestureImageViewListener.java b/gestureimageview/src/main/java/com/polites/android/GestureImageViewListener.java deleted file mode 100644 index ad5df10..0000000 --- a/gestureimageview/src/main/java/com/polites/android/GestureImageViewListener.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2012 Jason Polites - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.polites.android; - -/** - * @author jasonpolites - * - */ -public interface GestureImageViewListener { - - public void onTouch(float x, float y); - - public void onScale(float scale); - - public void onPosition(float x, float y); - -} diff --git a/gestureimageview/src/main/java/com/polites/android/GestureImageViewTouchListener.java b/gestureimageview/src/main/java/com/polites/android/GestureImageViewTouchListener.java deleted file mode 100644 index 7a10f07..0000000 --- a/gestureimageview/src/main/java/com/polites/android/GestureImageViewTouchListener.java +++ /dev/null @@ -1,549 +0,0 @@ -/* - * Copyright (c) 2012 Jason Polites - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.polites.android; - -import android.content.res.Configuration; -import android.graphics.PointF; -import android.view.GestureDetector; -import android.view.GestureDetector.SimpleOnGestureListener; -import android.view.MotionEvent; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.View.OnTouchListener; - -public class GestureImageViewTouchListener implements OnTouchListener { - - private GestureImageView image; - private OnClickListener onClickListener; - private OnReachBoundListener onReachBoundListener; - private final PointF current = new PointF(); - private final PointF last = new PointF(); - private final PointF next = new PointF(); - private final PointF down = new PointF(); - private final PointF midpoint = new PointF(); - - private final VectorF scaleVector = new VectorF(); - private final VectorF pinchVector = new VectorF(); - - private boolean touched = false; - private boolean inZoom = false; - - private float initialDistance; - private float lastScale = 1.0f; - private float currentScale = 1.0f; - - private float boundaryLeft = 0; - private float boundaryTop = 0; - private float boundaryRight = 0; - private float boundaryBottom = 0; - - private float maxScale = 5.0f; - private float minScale = 0.25f; - private float fitScaleHorizontal = 1.0f; - private float fitScaleVertical = 1.0f; - - private int canvasWidth = 0; - private int canvasHeight = 0; - - private float centerX = 0; - private float centerY = 0; - - private float startingScale = 0; - - private boolean canDragX = false; - private boolean canDragY = false; - - private boolean multiTouch = false; - - private int displayWidth; - private int displayHeight; - - private int imageWidth; - private int imageHeight; - - private FlingListener flingListener; - private FlingAnimation flingAnimation; - private ZoomAnimation zoomAnimation; - private MoveAnimation moveAnimation; - private GestureDetector tapDetector; - private GestureDetector flingDetector; - private GestureImageViewListener imageListener; - - private int dragSlop = 48; - - public interface OnReachBoundListener { - void onReach(View view, int direction); - } - - public GestureImageViewTouchListener(final GestureImageView image, int displayWidth, int displayHeight) { - super(); - - this.image = image; - - this.displayWidth = displayWidth; - this.displayHeight = displayHeight; - - this.centerX = (float) displayWidth / 2.0f; - this.centerY = (float) displayHeight / 2.0f; - - this.imageWidth = image.getImageWidth(); - this.imageHeight = image.getImageHeight(); - - startingScale = image.getScale(); - - currentScale = startingScale; - lastScale = startingScale; - - boundaryRight = displayWidth; - boundaryBottom = displayHeight; - boundaryLeft = 0; - boundaryTop = 0; - - next.x = image.getImageX(); - next.y = image.getImageY(); - - flingListener = new FlingListener(); - flingAnimation = new FlingAnimation(); - zoomAnimation = new ZoomAnimation(); - moveAnimation = new MoveAnimation(); - - flingAnimation.setListener(new FlingAnimationListener() { - @Override public void onMove(float x, float y) { - handleDrag(current.x + x, current.y + y); - } - - @Override public void onComplete() { - } - }); - - zoomAnimation.setZoom(2.0f); - zoomAnimation.setZoomAnimationListener(new ZoomAnimationListener() { - @Override public void onZoom(float scale, float x, float y) { - if (scale <= maxScale && scale >= minScale) { - handleScale(scale, x, y); - } - } - - @Override public void onComplete() { - inZoom = false; - handleUp(); - } - }); - - moveAnimation.setMoveAnimationListener(new MoveAnimationListener() { - - @Override public void onMove(float x, float y) { - image.setPosition(x, y); - image.redraw(); - } - }); - - tapDetector = new GestureDetector(image.getContext(), new SimpleOnGestureListener() { - @Override public boolean onDoubleTap(MotionEvent e) { - startZoom(e); - return true; - } - - @Override public boolean onSingleTapConfirmed(MotionEvent e) { - if (!inZoom) { - if (onClickListener != null) { - onClickListener.onClick(image); - return true; - } - } - - return false; - } - }); - - flingDetector = new GestureDetector(image.getContext(), flingListener); - imageListener = image.getGestureImageViewListener(); - - calculateBoundaries(); - } - - private void startFling() { - flingAnimation.setVelocityX(flingListener.getVelocityX()); - flingAnimation.setVelocityY(flingListener.getVelocityY()); - image.animationStart(flingAnimation); - } - - private void startZoom(MotionEvent e) { - inZoom = true; - zoomAnimation.reset(); - - float zoomTo; - - if (image.isLandscape()) { - if (image.getDeviceOrientation() == Configuration.ORIENTATION_PORTRAIT) { - int scaledHeight = image.getScaledHeight(); - - if (scaledHeight < canvasHeight) { - zoomTo = fitScaleVertical / currentScale; - zoomAnimation.setTouchX(e.getX()); - zoomAnimation.setTouchY(image.getCenterY()); - } else { - zoomTo = fitScaleHorizontal / currentScale; - zoomAnimation.setTouchX(image.getCenterX()); - zoomAnimation.setTouchY(image.getCenterY()); - } - } else { - int scaledWidth = image.getScaledWidth(); - - if (scaledWidth == canvasWidth) { - zoomTo = currentScale * 4.0f; - zoomAnimation.setTouchX(e.getX()); - zoomAnimation.setTouchY(e.getY()); - } else if (scaledWidth < canvasWidth) { - zoomTo = fitScaleHorizontal / currentScale; - zoomAnimation.setTouchX(image.getCenterX()); - zoomAnimation.setTouchY(e.getY()); - } else { - zoomTo = fitScaleHorizontal / currentScale; - zoomAnimation.setTouchX(image.getCenterX()); - zoomAnimation.setTouchY(image.getCenterY()); - } - } - } else { - if (image.getDeviceOrientation() == Configuration.ORIENTATION_PORTRAIT) { - - int scaledHeight = image.getScaledHeight(); - - if (scaledHeight == canvasHeight) { - zoomTo = currentScale * 4.0f; - zoomAnimation.setTouchX(e.getX()); - zoomAnimation.setTouchY(e.getY()); - } else if (scaledHeight < canvasHeight) { - zoomTo = fitScaleVertical / currentScale; - zoomAnimation.setTouchX(e.getX()); - zoomAnimation.setTouchY(image.getCenterY()); - } else { - zoomTo = fitScaleVertical / currentScale; - zoomAnimation.setTouchX(image.getCenterX()); - zoomAnimation.setTouchY(image.getCenterY()); - } - } else { - int scaledWidth = image.getScaledWidth(); - - if (scaledWidth < canvasWidth) { - zoomTo = fitScaleHorizontal / currentScale; - zoomAnimation.setTouchX(image.getCenterX()); - zoomAnimation.setTouchY(e.getY()); - } else { - zoomTo = fitScaleVertical / currentScale; - zoomAnimation.setTouchX(image.getCenterX()); - zoomAnimation.setTouchY(image.getCenterY()); - } - } - } - - zoomAnimation.setZoom(zoomTo); - image.animationStart(zoomAnimation); - } - - private void stopAnimations() { - image.animationStop(); - } - - @Override public boolean onTouch(View v, MotionEvent event) { - - if (inZoom || inZoom && tapDetector.onTouchEvent(event)) { - //if (event.getAction() == MotionEvent.ACTION_DOWN) { - // last.x = event.getX(); - // last.y = event.getY(); - //} else if (event.getAction() == MotionEvent.ACTION_UP) { - // if (event.getX() - last.x > dragSlop) { - // callReachBound(Direction.LEFT); - // } else if (last.x - event.getX() > dragSlop) { - // callReachBound(Direction.RIGHT); - // } - //} - return true; - } - - if (event.getPointerCount() == 1 && flingDetector.onTouchEvent(event)) { - startFling(); - } - - if (event.getAction() == MotionEvent.ACTION_UP) { - handleUp(); - } else if (event.getAction() == MotionEvent.ACTION_DOWN) { - stopAnimations(); - down.x = event.getX(); - down.y = event.getY(); - last.x = event.getX(); - last.y = event.getY(); - - if (imageListener != null) { - imageListener.onTouch(last.x, last.y); - } - - touched = true; - } else if (event.getAction() == MotionEvent.ACTION_MOVE) { - if (event.getPointerCount() > 1) { - multiTouch = true; - if (initialDistance > 0) { - - pinchVector.set(event); - pinchVector.calculateLength(); - - float distance = pinchVector.length; - - if (initialDistance != distance) { - - float newScale = (distance / initialDistance) * lastScale; - - if (newScale <= maxScale) { - scaleVector.length *= newScale; - - scaleVector.calculateEndPoint(); - - scaleVector.length /= newScale; - - float newX = scaleVector.end.x; - float newY = scaleVector.end.y; - - handleScale(newScale, newX, newY); - } - } - } else { - initialDistance = MathUtils.distance(event); - - MathUtils.midpoint(event, midpoint); - - scaleVector.setStart(midpoint); - scaleVector.setEnd(next); - - scaleVector.calculateLength(); - scaleVector.calculateAngle(); - - scaleVector.length /= lastScale; - } - } else { - if (!touched) { - touched = true; - last.x = event.getX(); - last.y = event.getY(); - next.x = image.getImageX(); - next.y = image.getImageY(); - } else if (!multiTouch) { - if (handleDrag(event.getX(), event.getY())) { - image.redraw(); - } - } - } - } - - return true; - } - - protected void handleUp() { - - multiTouch = false; - - initialDistance = 0; - lastScale = currentScale; - - //TODO can not work when Zoom state - if (!canDragX && current.x - down.x > dragSlop) { - callReachBound(Direction.LEFT); - } else if (!canDragX && down.x - current.x > dragSlop) { - callReachBound(Direction.RIGHT); - } else if (boundaryTop == 0 && current.x - down.y > dragSlop * 0.7) { - callReachBound(Direction.TOP); - } else if (boundaryBottom == 0 && down.y - current.x > dragSlop * 0.7) { - callReachBound(Direction.BOTTOM); - } - if (!canDragX) { - next.x = centerX; - } - - if (!canDragY) { - next.y = centerY; - } - - boundCoordinates(); - - if (!canDragX && !canDragY) { - - if (image.isLandscape()) { - currentScale = fitScaleHorizontal; - lastScale = fitScaleHorizontal; - } else { - currentScale = fitScaleVertical; - lastScale = fitScaleVertical; - } - } - - image.setScale(currentScale); - image.setPosition(next.x, next.y); - - if (imageListener != null) { - imageListener.onScale(currentScale); - imageListener.onPosition(next.x, next.y); - } - - image.redraw(); - } - - protected void handleScale(float scale, float x, float y) { - - currentScale = scale; - - if (currentScale > maxScale) { - currentScale = maxScale; - } else if (currentScale < minScale) { - currentScale = minScale; - } else { - next.x = x; - next.y = y; - } - - calculateBoundaries(); - - image.setScale(currentScale); - image.setPosition(next.x, next.y); - - if (imageListener != null) { - imageListener.onScale(currentScale); - imageListener.onPosition(next.x, next.y); - } - - image.redraw(); - } - - protected boolean handleDrag(float x, float y) { - current.x = x; - current.y = y; - - float diffX = (current.x - last.x); - float diffY = (current.y - last.y); - - if (diffX != 0 || diffY != 0) { - - if (canDragX) next.x += diffX; - if (canDragY) next.y += diffY; - - boundCoordinates(); - - last.x = current.x; - last.y = current.y; - - if (canDragX || canDragY) { - image.setPosition(next.x, next.y); - - if (imageListener != null) { - imageListener.onPosition(next.x, next.y); - } - - return true; - } - } - - return false; - } - - public void reset() { - currentScale = startingScale; - next.x = centerX; - next.y = centerY; - calculateBoundaries(); - image.setScale(currentScale); - image.setPosition(next.x, next.y); - image.redraw(); - } - - public float getMaxScale() { - return maxScale; - } - - public void setMaxScale(float maxScale) { - this.maxScale = maxScale; - } - - public float getMinScale() { - return minScale; - } - - public void setMinScale(float minScale) { - this.minScale = minScale; - } - - public void setOnClickListener(OnClickListener onClickListener) { - this.onClickListener = onClickListener; - } - - public void setOnReachBoundListener(OnReachBoundListener onReachBoundListener) { - this.onReachBoundListener = onReachBoundListener; - } - - protected void setCanvasWidth(int canvasWidth) { - this.canvasWidth = canvasWidth; - } - - protected void setCanvasHeight(int canvasHeight) { - this.canvasHeight = canvasHeight; - } - - protected void setFitScaleHorizontal(float fitScale) { - this.fitScaleHorizontal = fitScale; - } - - protected void setFitScaleVertical(float fitScaleVertical) { - this.fitScaleVertical = fitScaleVertical; - } - - protected void boundCoordinates() { - - if (next.x < boundaryLeft) { - next.x = boundaryLeft; - } else if (next.x > boundaryRight) { - next.x = boundaryRight; - } - if (next.y < boundaryTop) { - next.y = boundaryTop; - } else if (next.y > boundaryBottom) { - next.y = boundaryBottom; - } - } - - protected void callReachBound(int direction) { - if (onReachBoundListener != null) { - onReachBoundListener.onReach(image, direction); - } - } - - protected void calculateBoundaries() { - - int effectiveWidth = Math.round((float) imageWidth * currentScale); - int effectiveHeight = Math.round((float) imageHeight * currentScale); - - canDragX = effectiveWidth > displayWidth; - canDragY = effectiveHeight > displayHeight; - - if (canDragX) { - float diff = (float) (effectiveWidth - displayWidth) / 2.0f; - boundaryLeft = centerX - diff; - boundaryRight = centerX + diff; - } - - if (canDragY) { - float diff = (float) (effectiveHeight - displayHeight) / 2.0f; - boundaryTop = centerY - diff; - boundaryBottom = centerY + diff; - } - } -} diff --git a/gestureimageview/src/main/java/com/polites/android/MathUtils.java b/gestureimageview/src/main/java/com/polites/android/MathUtils.java deleted file mode 100644 index 1f98a5f..0000000 --- a/gestureimageview/src/main/java/com/polites/android/MathUtils.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2012 Jason Polites - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.polites.android; - -import android.graphics.PointF; -import android.view.MotionEvent; - -public class MathUtils { - - public static float distance(MotionEvent event) { - float x = event.getX(0) - event.getX(1); - float y = event.getY(0) - event.getY(1); - return (float) Math.sqrt(x * x + y * y); - } - - public static float distance(PointF p1, PointF p2) { - float x = p1.x - p2.x; - float y = p1.y - p2.y; - return (float) Math.sqrt(x * x + y * y); - } - - public static float distance(float x1, float y1, float x2, float y2) { - float x = x1 - x2; - float y = y1 - y2; - return (float) Math.sqrt(x * x + y * y); - } - - public static void midpoint(MotionEvent event, PointF point) { - float x1 = event.getX(0); - float y1 = event.getY(0); - float x2 = event.getX(1); - float y2 = event.getY(1); - midpoint(x1, y1, x2, y2, point); - } - - public static void midpoint(float x1, float y1, float x2, float y2, PointF point) { - point.x = (x1 + x2) / 2.0f; - point.y = (y1 + y2) / 2.0f; - } - - /** - * Rotates p1 around p2 by angle degrees. - */ - public void rotate(PointF p1, PointF p2, float angle) { - float px = p1.x; - float py = p1.y; - float ox = p2.x; - float oy = p2.y; - p1.x = (float) (Math.cos(angle) * (px - ox) - Math.sin(angle) * (py - oy) + ox); - p1.y = (float) (Math.sin(angle) * (px - ox) + Math.cos(angle) * (py - oy) + oy); - } - - public static float angle(PointF p1, PointF p2) { - return angle(p1.x, p1.y, p2.x, p2.y); - } - - public static float angle(float x1, float y1, float x2, float y2) { - return (float) Math.atan2(y2 - y1, x2 - x1); - } -} diff --git a/gestureimageview/src/main/java/com/polites/android/MoveAnimation.java b/gestureimageview/src/main/java/com/polites/android/MoveAnimation.java deleted file mode 100644 index ccb8812..0000000 --- a/gestureimageview/src/main/java/com/polites/android/MoveAnimation.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2012 Jason Polites - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.polites.android; - - -/** - * @author Jason Polites - * - */ -public class MoveAnimation implements Animation { - - private boolean firstFrame = true; - - private float startX; - private float startY; - - private float targetX; - private float targetY; - private long animationTimeMS = 100; - private long totalTime = 0; - - private MoveAnimationListener moveAnimationListener; - - /* (non-Javadoc) - * @see com.polites.android.Animation#update(com.polites.android.GestureImageView, long) - */ - @Override - public boolean update(GestureImageView view, long time) { - totalTime += time; - - if(firstFrame) { - firstFrame = false; - startX = view.getImageX(); - startY = view.getImageY(); - } - - if(totalTime < animationTimeMS) { - - float ratio = (float) totalTime / animationTimeMS; - - float newX = ((targetX - startX) * ratio) + startX; - float newY = ((targetY - startY) * ratio) + startY; - - if(moveAnimationListener != null) { - moveAnimationListener.onMove(newX, newY); - } - - return true; - } - else { - if(moveAnimationListener != null) { - moveAnimationListener.onMove(targetX, targetY); - } - } - - return false; - } - - public void reset() { - firstFrame = true; - totalTime = 0; - } - - - public float getTargetX() { - return targetX; - } - - - public void setTargetX(float targetX) { - this.targetX = targetX; - } - - - public float getTargetY() { - return targetY; - } - - public void setTargetY(float targetY) { - this.targetY = targetY; - } - - public long getAnimationTimeMS() { - return animationTimeMS; - } - - public void setAnimationTimeMS(long animationTimeMS) { - this.animationTimeMS = animationTimeMS; - } - - public void setMoveAnimationListener(MoveAnimationListener moveAnimationListener) { - this.moveAnimationListener = moveAnimationListener; - } -} diff --git a/gestureimageview/src/main/java/com/polites/android/MoveAnimationListener.java b/gestureimageview/src/main/java/com/polites/android/MoveAnimationListener.java deleted file mode 100644 index cb570b2..0000000 --- a/gestureimageview/src/main/java/com/polites/android/MoveAnimationListener.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2012 Jason Polites - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.polites.android; - - -/** - * @author Jason Polites - * - */ -public interface MoveAnimationListener { - - public void onMove(float x, float y); - -} diff --git a/gestureimageview/src/main/java/com/polites/android/VectorF.java b/gestureimageview/src/main/java/com/polites/android/VectorF.java deleted file mode 100644 index e86d2bd..0000000 --- a/gestureimageview/src/main/java/com/polites/android/VectorF.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2012 Jason Polites - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.polites.android; - -import android.graphics.PointF; -import android.view.MotionEvent; - -public class VectorF { - - public float angle; - public float length; - - public final PointF start = new PointF(); - public final PointF end = new PointF(); - - public void calculateEndPoint() { - end.x = (float) (Math.cos(angle) * length + start.x); - end.y = (float) (Math.sin(angle) * length + start.y); - } - - public void setStart(PointF p) { - this.start.x = p.x; - this.start.y = p.y; - } - - public void setEnd(PointF p) { - this.end.x = p.x; - this.end.y = p.y; - } - - public void set(MotionEvent event) { - this.start.x = event.getX(0); - this.start.y = event.getY(0); - this.end.x = event.getX(1); - this.end.y = event.getY(1); - } - - public float calculateLength() { - length = MathUtils.distance(start, end); - return length; - } - - public float calculateAngle() { - angle = MathUtils.angle(start, end); - return angle; - } - - -} diff --git a/gestureimageview/src/main/java/com/polites/android/ZoomAnimation.java b/gestureimageview/src/main/java/com/polites/android/ZoomAnimation.java deleted file mode 100644 index 5cceeb0..0000000 --- a/gestureimageview/src/main/java/com/polites/android/ZoomAnimation.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (c) 2012 Jason Polites - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.polites.android; - -import android.graphics.PointF; - - -/** - * @author Jason Polites - * - */ -public class ZoomAnimation implements Animation { - - private boolean firstFrame = true; - - private float touchX; - private float touchY; - - private float zoom; - - private float startX; - private float startY; - private float startScale; - - private float xDiff; - private float yDiff; - private float scaleDiff; - - private long animationLengthMS = 200; - private long totalTime = 0; - - private ZoomAnimationListener zoomAnimationListener; - - /* (non-Javadoc) - * @see com.polites.android.Animation#update(com.polites.android.GestureImageView, long) - */ - @Override - public boolean update(GestureImageView view, long time) { - if(firstFrame) { - firstFrame = false; - - startX = view.getImageX(); - startY = view.getImageY(); - startScale = view.getScale(); - scaleDiff = (zoom * startScale) - startScale; - - if(scaleDiff > 0) { - // Calculate destination for midpoint - VectorF vector = new VectorF(); - - // Set the touch point as start because we want to move the end - vector.setStart(new PointF(touchX, touchY)); - vector.setEnd(new PointF(startX, startY)); - - vector.calculateAngle(); - - // Get the current length - float length = vector.calculateLength(); - - // Multiply length by zoom to get the new length - vector.length = length*zoom; - - // Now deduce the new endpoint - vector.calculateEndPoint(); - - xDiff = vector.end.x - startX; - yDiff = vector.end.y - startY; - } - else { - // Zoom out to center - xDiff = view.getCenterX() - startX; - yDiff = view.getCenterY() - startY; - } - } - - totalTime += time; - - float ratio = (float) totalTime / (float) animationLengthMS; - - if(ratio < 1) { - - if(ratio > 0) { - // we still have time left - float newScale = (ratio * scaleDiff) + startScale; - float newX = (ratio * xDiff) + startX; - float newY = (ratio * yDiff) + startY; - - if(zoomAnimationListener != null) { - zoomAnimationListener.onZoom(newScale, newX, newY); - } - } - - return true; - } - else { - - float newScale = scaleDiff + startScale; - float newX = xDiff + startX; - float newY = yDiff + startY; - - if(zoomAnimationListener != null) { - zoomAnimationListener.onZoom(newScale, newX, newY); - zoomAnimationListener.onComplete(); - } - - return false; - } - } - - public void reset() { - firstFrame = true; - totalTime = 0; - } - - public float getZoom() { - return zoom; - } - - public void setZoom(float zoom) { - this.zoom = zoom; - } - - public float getTouchX() { - return touchX; - } - - public void setTouchX(float touchX) { - this.touchX = touchX; - } - - public float getTouchY() { - return touchY; - } - - public void setTouchY(float touchY) { - this.touchY = touchY; - } - - public long getAnimationLengthMS() { - return animationLengthMS; - } - - public void setAnimationLengthMS(long animationLengthMS) { - this.animationLengthMS = animationLengthMS; - } - - public ZoomAnimationListener getZoomAnimationListener() { - return zoomAnimationListener; - } - - public void setZoomAnimationListener(ZoomAnimationListener zoomAnimationListener) { - this.zoomAnimationListener = zoomAnimationListener; - } -} diff --git a/gestureimageview/src/main/java/com/polites/android/ZoomAnimationListener.java b/gestureimageview/src/main/java/com/polites/android/ZoomAnimationListener.java deleted file mode 100644 index 4d50898..0000000 --- a/gestureimageview/src/main/java/com/polites/android/ZoomAnimationListener.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2012 Jason Polites - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.polites.android; - - -/** - * @author Jason Polites - * - */ -public interface ZoomAnimationListener { - public void onZoom(float scale, float x, float y); - public void onComplete(); -} diff --git a/pdfviewsample/.gitignore b/pdfviewsample/.gitignore deleted file mode 100644 index 796b96d..0000000 --- a/pdfviewsample/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/pdfviewsample/build.gradle b/pdfviewsample/build.gradle deleted file mode 100644 index c5111b1..0000000 --- a/pdfviewsample/build.gradle +++ /dev/null @@ -1,27 +0,0 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 23 - buildToolsVersion "23.0.2" - - defaultConfig { - applicationId "com.wyx.pdf" - minSdkVersion 16 - targetSdkVersion 23 - versionCode 1 - versionName "1.0" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } -} - -dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:23.1.1' - compile project(':PdfView') -} diff --git a/pdfviewsample/pdfviewsample.iml b/pdfviewsample/pdfviewsample.iml deleted file mode 100644 index 6ebb85b..0000000 --- a/pdfviewsample/pdfviewsample.iml +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pdfviewsample/proguard-rules.pro b/pdfviewsample/proguard-rules.pro deleted file mode 100644 index 8471c22..0000000 --- a/pdfviewsample/proguard-rules.pro +++ /dev/null @@ -1,17 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /Users/winney/Documents/android-sdk-macosx/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} diff --git a/pdfviewsample/src/androidTest/java/com/wyx/pdfviewsample/ApplicationTest.java b/pdfviewsample/src/androidTest/java/com/wyx/pdfviewsample/ApplicationTest.java deleted file mode 100644 index ba92db9..0000000 --- a/pdfviewsample/src/androidTest/java/com/wyx/pdfviewsample/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.wyx.pdfviewsample; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} \ No newline at end of file diff --git a/pdfviewsample/src/main/AndroidManifest.xml b/pdfviewsample/src/main/AndroidManifest.xml deleted file mode 100644 index b855ada..0000000 --- a/pdfviewsample/src/main/AndroidManifest.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/pdfviewsample/src/main/assets/about.pdf b/pdfviewsample/src/main/assets/about.pdf deleted file mode 100755 index af992a0..0000000 Binary files a/pdfviewsample/src/main/assets/about.pdf and /dev/null differ diff --git a/pdfviewsample/src/main/assets/sample.pdf b/pdfviewsample/src/main/assets/sample.pdf deleted file mode 100755 index 376f277..0000000 Binary files a/pdfviewsample/src/main/assets/sample.pdf and /dev/null differ diff --git a/pdfviewsample/src/main/java/com/wyx/pdfviewsample/L.java b/pdfviewsample/src/main/java/com/wyx/pdfviewsample/L.java deleted file mode 100644 index 62a1242..0000000 --- a/pdfviewsample/src/main/java/com/wyx/pdfviewsample/L.java +++ /dev/null @@ -1,242 +0,0 @@ -package com.wyx.pdfviewsample; - -import android.os.Environment; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; - -/** - * Log record tool - */ -@SuppressWarnings({ "unused", "ResultOfMethodCallIgnored" }) public class L { - - private static final int LOG_CAT_MAX_LENGTH = 3900; - - private static final String TAG_LINE_BREAK = "****"; - private static final String EMPTY_LOG = "---"; - - private static final String ROOT = Environment.getExternalStorageDirectory().getAbsolutePath(); - private static final String FILE_NAME = "logger.log"; - private static final int WRITE_TO_SD_PRIORITY_LEVEL = Log.DEBUG; - - private static String logFile = ROOT + "/" + FILE_NAME; - private static boolean write2SdCard = false; - private static int write2SdPriorityLevel = WRITE_TO_SD_PRIORITY_LEVEL; - - private static boolean debug = true; - - public static void setDebug(boolean debug) { - L.debug = debug; - } - - public static void setWrite2SdCard(boolean sdCard) { - write2SdCard = sdCard; - } - - public static void setWriteToSdPriorityLevel(int level) { - write2SdPriorityLevel = level; - } - - public static void exception(Throwable e) { - if (debug && e != null) { - e.printStackTrace(); - } - } - - public static void exception(Throwable e, String s) { - if (debug && e != null) { - e.printStackTrace(); - e(TAG_LINE_BREAK, s); - } - } - - public static void w(Object object, Object msg) { - if (debug) { - print(Log.WARN, object, msg); - } - } - - public static void w(Object msg) { - if (debug) { - print(Log.WARN, TAG_LINE_BREAK, msg); - } - } - - public static void v(Object object, Object msg) { - if (debug) { - print(Log.VERBOSE, object, msg); - } - } - - public static void v(Object msg) { - if (debug) { - print(Log.VERBOSE, TAG_LINE_BREAK, msg); - } - } - - public static void d(Object object, Object msg) { - if (debug) { - print(Log.DEBUG, object, msg); - } - } - - public static void d(Object msg) { - if (debug) { - print(Log.DEBUG, TAG_LINE_BREAK, msg); - } - } - - public static void i(Object object, Object msg) { - if (debug) { - print(Log.INFO, object, msg); - } - } - - public static void i(Object msg) { - if (debug) { - print(Log.INFO, TAG_LINE_BREAK, msg); - } - } - - public static void e(Object object, Object msg) { - if (debug) { - print(Log.ERROR, object, msg); - } - } - - public static void e(Object msg) { - if (debug) { - print(Log.ERROR, TAG_LINE_BREAK, msg); - } - } - - private static void print(int priority, Object tag, Object msg) { - String s = toString(msg); - printToLogCat(priority, tag, s); - if (write2SdCard) { - writeLog(priority, tag, s); - } - } - - private static void printToLogCat(int priority, Object tag, String s) { - if (s.length() > LOG_CAT_MAX_LENGTH) { - println(priority, tag, "log length - " + String.valueOf(s.length())); - int chunkCount = s.length() / LOG_CAT_MAX_LENGTH; // integer division - for (int i = 0; i <= chunkCount; i++) { - int max = LOG_CAT_MAX_LENGTH * (i + 1); - if (max >= s.length()) { - println(priority, "chunk " + i + " of " + chunkCount, s.substring(LOG_CAT_MAX_LENGTH * i, s.length())); - } else { - println(priority, "chunk " + i + " of " + chunkCount, s.substring(LOG_CAT_MAX_LENGTH * i, max)); - } - } - } else { - println(priority, tag, s); - } - } - - public static void resetLogFile() { - File file = new File(logFile); - file.delete(); - try { - file.createNewFile(); - } catch (IOException e) { - exception(e); - } - } - - private static void writeLog(int priority, Object tag, String s) { - if (TextUtils.isEmpty(s)) { - return; - } - - if (priority < write2SdPriorityLevel) { - return; - } - - try { - File file = new File(logFile); - if (!file.exists()) { - file.createNewFile(); - } - FileWriter writer = new FileWriter(file, true); - writer.flush(); - writer.close(); - } catch (IOException e) { - exception(e); - } - } - - private static void println(int priority, Object tag, String s) { - Log.println(priority, getTagName(tag), s); - } - - private static String getTagName(Object tag) { - if (tag instanceof String) { - return (String) tag; - } - - if (tag instanceof Class) { - return ((Class) tag).getSimpleName(); - } else { - return getTagName(tag.getClass()); - } - } - - private static String toString(Object msg) { - if (msg == null) { - return EMPTY_LOG; - } - String s = msg.toString(); - if (s.isEmpty()) { - return EMPTY_LOG; - } else { - return s; - } - } - - public static void printTouchEvent(MotionEvent ev) { - L.e("touch event", actionToString(ev.getAction())); - final int pointerCount = ev.getPointerCount(); - for (int i = 0; i < pointerCount; i++) { - L.d("point", - "id[" + i + "]=" + ev.getPointerId(i) + ", x[" + i + "]=" + ev.getX(i) + ", y[" + i + "]=" + ev.getY(i)); - } - // L.d("pointer count", pointerCount); - } - - public static String actionToString(int action) { - switch (action) { - case MotionEvent.ACTION_DOWN: - return "ACTION_DOWN"; - case MotionEvent.ACTION_UP: - return "ACTION_UP"; - case MotionEvent.ACTION_CANCEL: - return "ACTION_CANCEL"; - case MotionEvent.ACTION_OUTSIDE: - return "ACTION_OUTSIDE"; - case MotionEvent.ACTION_MOVE: - return "ACTION_MOVE"; - case MotionEvent.ACTION_HOVER_MOVE: - return "ACTION_HOVER_MOVE"; - case MotionEvent.ACTION_SCROLL: - return "ACTION_SCROLL"; - case MotionEvent.ACTION_HOVER_ENTER: - return "ACTION_HOVER_ENTER"; - case MotionEvent.ACTION_HOVER_EXIT: - return "ACTION_HOVER_EXIT"; - } - int index = (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; - switch (action & MotionEvent.ACTION_MASK) { - case MotionEvent.ACTION_POINTER_DOWN: - return "ACTION_POINTER_DOWN(" + index + ")"; - case MotionEvent.ACTION_POINTER_UP: - return "ACTION_POINTER_UP(" + index + ")"; - default: - return Integer.toString(action); - } - } -} diff --git a/pdfviewsample/src/main/java/com/wyx/pdfviewsample/Main2Activity.java b/pdfviewsample/src/main/java/com/wyx/pdfviewsample/Main2Activity.java deleted file mode 100644 index 21d2de6..0000000 --- a/pdfviewsample/src/main/java/com/wyx/pdfviewsample/Main2Activity.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.wyx.pdfviewsample; - -import android.app.Activity; -import android.os.Bundle; -import android.view.View; -import java.io.IOException; -import net.sf.andpdf.pdfviewer.gui.PdfView; -import net.sf.andpdf.utils.FileUtils; - -public class Main2Activity extends Activity { - - PdfView pdfView; - - @Override protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main2); - - pdfView = (PdfView) findViewById(R.id.pdf_view); - - //ViewGroup.LayoutParams params = - // new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); - //GestureImageView view = pdfView.mImageView; - //view.setImageResource(R.drawable.back02); - //view.setLayoutParams(params); - - //ViewGroup layout = (ViewGroup) findViewById(R.id.layout); - - //layout.addView(view); - View view = pdfView.mImageView; - } - - @Override protected void onStart() { - super.onStart(); - try { - pdfView.parsePDF(FileUtils.fileFromAsset(this, "sample.pdf"), null); - } catch (IOException e) { - e.printStackTrace(); - } - pdfView.startRenderThread(1, 1.0f); - } -} diff --git a/pdfviewsample/src/main/java/com/wyx/pdfviewsample/MainActivity.java b/pdfviewsample/src/main/java/com/wyx/pdfviewsample/MainActivity.java deleted file mode 100644 index ebd60b5..0000000 --- a/pdfviewsample/src/main/java/com/wyx/pdfviewsample/MainActivity.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.wyx.pdfviewsample; - -import java.io.IOException; -import net.sf.andpdf.pdfviewer.PdfViewerActivity; -import net.sf.andpdf.utils.FileUtils; - -public class MainActivity extends PdfViewerActivity { - - @Override public String getFileName() { - try { - return FileUtils.fileFromAsset(this, "about.pdf").toString(); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } - - @Override public int getPreviousPageImageResource() { - return R.drawable.left_arrow; - } - - @Override public int getNextPageImageResource() { - return R.drawable.right_arrow; - } - - @Override public int getZoomInImageResource() { - return R.drawable.zoom_in; - } - - @Override public int getZoomOutImageResource() { - return R.drawable.zoom_out; - } - - @Override public int getPdfPasswordLayoutResource() { - return 0; - } - - @Override public int getPdfPageNumberResource() { - return 0; - } - - @Override public int getPdfPasswordEditField() { - return 0; - } - - @Override public int getPdfPasswordOkButton() { - return 0; - } - - @Override public int getPdfPasswordExitButton() { - return 0; - } - - @Override public int getPdfPageNumberEditField() { - return 0; - } -} - diff --git a/pdfviewsample/src/main/res/layout/activity_main.xml b/pdfviewsample/src/main/res/layout/activity_main.xml deleted file mode 100644 index 4ae4c8c..0000000 --- a/pdfviewsample/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - diff --git a/pdfviewsample/src/main/res/layout/activity_main2.xml b/pdfviewsample/src/main/res/layout/activity_main2.xml deleted file mode 100644 index 45a1003..0000000 --- a/pdfviewsample/src/main/res/layout/activity_main2.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/pdfviewsample/src/main/res/mipmap-hdpi/ic_launcher.png b/pdfviewsample/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index cde69bc..0000000 Binary files a/pdfviewsample/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/pdfviewsample/src/main/res/mipmap-mdpi/ic_launcher.png b/pdfviewsample/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index c133a0c..0000000 Binary files a/pdfviewsample/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/pdfviewsample/src/main/res/mipmap-xhdpi/ic_launcher.png b/pdfviewsample/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index bfa42f0..0000000 Binary files a/pdfviewsample/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/pdfviewsample/src/main/res/mipmap-xxhdpi/ic_launcher.png b/pdfviewsample/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 324e72c..0000000 Binary files a/pdfviewsample/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/pdfviewsample/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/pdfviewsample/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index aee44e1..0000000 Binary files a/pdfviewsample/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/pdfviewsample/src/main/res/values-w820dp/dimens.xml b/pdfviewsample/src/main/res/values-w820dp/dimens.xml deleted file mode 100644 index 63fc816..0000000 --- a/pdfviewsample/src/main/res/values-w820dp/dimens.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - 64dp - diff --git a/pdfviewsample/src/main/res/values/colors.xml b/pdfviewsample/src/main/res/values/colors.xml deleted file mode 100644 index 5a077b3..0000000 --- a/pdfviewsample/src/main/res/values/colors.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - #3F51B5 - #303F9F - #FF4081 - diff --git a/pdfviewsample/src/main/res/values/dimens.xml b/pdfviewsample/src/main/res/values/dimens.xml deleted file mode 100644 index 47c8224..0000000 --- a/pdfviewsample/src/main/res/values/dimens.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - 16dp - 16dp - diff --git a/pdfviewsample/src/main/res/values/strings.xml b/pdfviewsample/src/main/res/values/strings.xml deleted file mode 100644 index e21481d..0000000 --- a/pdfviewsample/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - PdfViewSample - diff --git a/pdfviewsample/src/main/res/values/styles.xml b/pdfviewsample/src/main/res/values/styles.xml deleted file mode 100644 index 705be27..0000000 --- a/pdfviewsample/src/main/res/values/styles.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - diff --git a/pdfviewsample/src/test/java/com/wyx/pdfviewsample/ExampleUnitTest.java b/pdfviewsample/src/test/java/com/wyx/pdfviewsample/ExampleUnitTest.java deleted file mode 100644 index 3754320..0000000 --- a/pdfviewsample/src/test/java/com/wyx/pdfviewsample/ExampleUnitTest.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.wyx.pdfviewsample; - -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * To work on unit tests, switch the Test Artifact in the Build Variants view. - */ -public class ExampleUnitTest { - @Test public void addition_isCorrect() throws Exception { - assertEquals(4, 2 + 2); - } -} \ No newline at end of file