diff options
author | nicolasroard <nicolasroard@google.com> | 2013-09-06 17:21:55 -0700 |
---|---|---|
committer | nicolasroard <nicolasroard@google.com> | 2013-09-06 17:39:46 -0700 |
commit | 32cc4dd751569721aa19218b4d947145577060d0 (patch) | |
tree | 5f2a8a96cb1bb08a94e0ca8abbf1c03bffbe242a /src/com/android/gallery3d/filtershow/imageshow | |
parent | 98b296ffc50e11b7950acf1d0df850b617913131 (diff) | |
download | android_packages_apps_Gallery2-32cc4dd751569721aa19218b4d947145577060d0.tar.gz android_packages_apps_Gallery2-32cc4dd751569721aa19218b4d947145577060d0.tar.bz2 android_packages_apps_Gallery2-32cc4dd751569721aa19218b4d947145577060d0.zip |
Fix UI performances / glitches
- load/process thumbnails fully in background
- fix reveal slider
- fix race condition when loading
- better memory usage
- fix loading spinner (wasn't shown!)
Change-Id: Id78163556d8ee1c3ad04eae16fe1bf06f4312405
Diffstat (limited to 'src/com/android/gallery3d/filtershow/imageshow')
-rw-r--r-- | src/com/android/gallery3d/filtershow/imageshow/ImageShow.java | 30 | ||||
-rw-r--r-- | src/com/android/gallery3d/filtershow/imageshow/MasterImage.java | 33 |
2 files changed, 61 insertions, 2 deletions
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java index 77eaf4dc7..813d76172 100644 --- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java +++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java @@ -30,6 +30,7 @@ import android.graphics.Rect; import android.graphics.Shader; import android.graphics.drawable.NinePatchDrawable; import android.util.AttributeSet; +import android.util.Log; import android.view.GestureDetector; import android.view.GestureDetector.OnDoubleTapListener; import android.view.GestureDetector.OnGestureListener; @@ -91,6 +92,7 @@ public class ImageShow extends View implements OnGestureListener, Point mOriginalTranslation = new Point(); float mOriginalScale; float mStartFocusX, mStartFocusY; + private enum InteractionMode { NONE, SCALE, @@ -235,6 +237,19 @@ public class ImageShow extends View implements OnGestureListener, getWidth() - 2*mShadowMargin, getHeight() - 2*mShadowMargin); + MasterImage img = MasterImage.getImage(); + // Hide the loading indicator as needed + if (img.isFirstLoad() && getFilteredImage() != null) { + if ((img.getLoadedPreset() == null) + || (img.getLoadedPreset() != null + && img.getLoadedPreset().equals(img.getCurrentPreset()))) { + img.setFirstLoad(false); + mActivity.stopLoadingIndicator(); + } else if (img.getLoadedPreset() != null) { + return; + } + } + float cx = canvas.getWidth()/2.0f; float cy = canvas.getHeight()/2.0f; float scaleFactor = MasterImage.getImage().getScaleFactor(); @@ -327,6 +342,10 @@ public class ImageShow extends View implements OnGestureListener, float x = centerX - maskW * maskScale; float y = centerY - maskH * maskScale; + Point point = mActivity.hintTouchPoint(this); + x = point.x - maskW * maskScale; + y = point.y - maskH * maskScale; + // Prepare the shader mShaderMatrix.reset(); mShaderMatrix.setScale(1.0f / maskScale, 1.0f / maskScale); @@ -472,6 +491,17 @@ public class ImageShow extends View implements OnGestureListener, Rect d = new Rect(mImageBounds.left, mImageBounds.top, mImageBounds.left + px, mImageBounds.top + py); + if (mShowOriginalDirection == UNVEIL_HORIZONTAL) { + if (mTouchDown.x - mTouch.x > 0) { + d.set(mImageBounds.left + px, mImageBounds.top, + mImageBounds.right, mImageBounds.top + py); + } + } else { + if (mTouchDown.y - mTouch.y > 0) { + d.set(mImageBounds.left, mImageBounds.top + py, + mImageBounds.left + px, mImageBounds.bottom); + } + } canvas.clipRect(d); drawImage(canvas, image, false); Paint paint = new Paint(); diff --git a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java index c562e4a88..3af8c4a2a 100644 --- a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java +++ b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java @@ -19,11 +19,13 @@ package com.android.gallery3d.filtershow.imageshow; import android.animation.Animator; import android.animation.ValueAnimator; import android.graphics.Bitmap; +import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Point; import android.graphics.Rect; import android.graphics.RectF; import android.net.Uri; +import android.util.Log; import com.android.gallery3d.exif.ExifTag; import com.android.gallery3d.filtershow.FilterShowActivity; @@ -70,6 +72,7 @@ public class MasterImage implements RenderingRequestCaller { private Bitmap mOriginalBitmapSmall = null; private Bitmap mOriginalBitmapLarge = null; private Bitmap mOriginalBitmapHighres = null; + private Bitmap mTemporaryThumbnail = null; private int mOrientation; private Rect mOriginalBounds; private final Vector<ImageShow> mLoadListeners = new Vector<ImageShow>(); @@ -113,6 +116,8 @@ public class MasterImage implements RenderingRequestCaller { private List<ExifTag> mEXIF; private BitmapCache mBitmapCache = new BitmapCache(); + private boolean mFirstLoad; + private MasterImage() { } @@ -128,6 +133,14 @@ public class MasterImage implements RenderingRequestCaller { return sMasterImage; } + public void setFirstLoad(boolean firstLoad) { + mFirstLoad = firstLoad; + } + + public boolean isFirstLoad() { + return mFirstLoad; + } + public Bitmap getOriginalBitmapSmall() { return mOriginalBitmapSmall; } @@ -421,8 +434,8 @@ public class MasterImage implements RenderingRequestCaller { mPreviousPreset = getPreviewBuffer().getConsumer().getPreset(); if (newRepresentation instanceof FilterUserPresetRepresentation) { mCurrentLookAnimation = CIRCLE_ANIMATION; - mAnimator = ValueAnimator.ofFloat(0, 20); - mAnimator.setDuration(500); + mAnimator = ValueAnimator.ofFloat(0, 40); + mAnimator.setDuration(650); } if (newRepresentation instanceof FilterRotateRepresentation) { mCurrentLookAnimation = ROTATE_ANIMATION; @@ -535,6 +548,12 @@ public class MasterImage implements RenderingRequestCaller { } public void invalidatePreview() { + if (mPreset == null) { + return; + } + if (mPreset.nbFilters() == 0) { + MasterImage.getImage().setFirstLoad(false); + } mPreviewPreset.enqueuePreset(mPreset); mPreviewBuffer.invalidate(); invalidatePartialPreview(); @@ -700,6 +719,16 @@ public class MasterImage implements RenderingRequestCaller { needsUpdatePartialPreview(); } + public Bitmap getTemporaryThumbnailBitmap() { + if (mTemporaryThumbnail == null + && getOriginalBitmapSmall() != null) { + mTemporaryThumbnail = getOriginalBitmapSmall().copy(Bitmap.Config.ARGB_8888, true); + Canvas canvas = new Canvas(mTemporaryThumbnail); + canvas.drawARGB(200, 80, 80, 80); + } + return mTemporaryThumbnail; + } + public Bitmap getThumbnailBitmap() { return getOriginalBitmapSmall(); } |