Set initial crop handles to original page location
Treat the image tile set's 0 coordinate as the top and use pageSize to compute the bottom of the original screenshot. Bug: 179907401 Test: Verify potisitioning when scrolling from the top, bottom and middle. Change-Id: I44fca11474221b5d4249483bf22a88ede5e8104e
This commit is contained in:
@@ -136,7 +136,7 @@ public class CropView extends View {
|
||||
case MotionEvent.ACTION_UP:
|
||||
if (mCurrentDraggingBoundary != CropBoundary.NONE) {
|
||||
// Commit the delta to the stored crop values.
|
||||
commitDeltas();
|
||||
commitDeltas(mCurrentDraggingBoundary);
|
||||
updateListener(event);
|
||||
}
|
||||
}
|
||||
@@ -184,12 +184,12 @@ public class CropView extends View {
|
||||
animator.addListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
commitDeltas();
|
||||
commitDeltas(boundary);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationCancel(Animator animation) {
|
||||
commitDeltas();
|
||||
commitDeltas(boundary);
|
||||
}
|
||||
});
|
||||
animator.setFloatValues(0f, 1f);
|
||||
@@ -228,11 +228,14 @@ public class CropView extends View {
|
||||
mCropInteractionListener = listener;
|
||||
}
|
||||
|
||||
private void commitDeltas() {
|
||||
mTopCrop += mTopDelta;
|
||||
mBottomCrop += mBottomDelta;
|
||||
mTopDelta = 0;
|
||||
mBottomDelta = 0;
|
||||
private void commitDeltas(CropBoundary boundary) {
|
||||
if (boundary == CropBoundary.TOP) {
|
||||
mTopCrop += mTopDelta;
|
||||
mTopDelta = 0;
|
||||
} else if (boundary == CropBoundary.BOTTOM) {
|
||||
mBottomCrop += mBottomDelta;
|
||||
mBottomDelta = 0;
|
||||
}
|
||||
}
|
||||
|
||||
private void updateListener(MotionEvent event) {
|
||||
|
||||
@@ -339,14 +339,22 @@ public class LongScreenshotActivity extends Activity {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete(ImageTileSet imageTileSet) {
|
||||
public void onComplete(ImageTileSet imageTileSet, int pageSize) {
|
||||
Log.i(TAG, "Got tiles " + imageTileSet.getWidth() + " x "
|
||||
+ imageTileSet.getHeight());
|
||||
mPreview.setImageDrawable(imageTileSet.getDrawable());
|
||||
updateCropLocation();
|
||||
mMagnifierView.setDrawable(imageTileSet.getDrawable(),
|
||||
imageTileSet.getWidth(), imageTileSet.getHeight());
|
||||
mCropView.animateBoundaryTo(CropView.CropBoundary.BOTTOM, 0.5f);
|
||||
// Original boundaries go from the image tile set's y=0 to y=pageSize, so
|
||||
// we animate to that as a starting crop position.
|
||||
float topFraction = Math.max(0,
|
||||
-imageTileSet.getTop() / (float) imageTileSet.getHeight());
|
||||
float bottomFraction = Math.min(1f,
|
||||
1 - (imageTileSet.getBottom() - pageSize)
|
||||
/ (float) imageTileSet.getHeight());
|
||||
mCropView.animateBoundaryTo(CropView.CropBoundary.TOP, topFraction);
|
||||
mCropView.animateBoundaryTo(CropView.CropBoundary.BOTTOM, bottomFraction);
|
||||
mBackgroundExecutor.execute(() -> saveCacheBitmap(imageTileSet));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -164,7 +164,7 @@ public class ScrollCaptureController {
|
||||
if (mImageTileSet.isEmpty()) {
|
||||
mCaptureCallback.onError();
|
||||
} else {
|
||||
mCaptureCallback.onComplete(mImageTileSet);
|
||||
mCaptureCallback.onComplete(mImageTileSet, session.getPageHeight());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,7 +172,7 @@ public class ScrollCaptureController {
|
||||
* Callback for image capture completion or error.
|
||||
*/
|
||||
public interface ScrollCaptureCallback {
|
||||
void onComplete(ImageTileSet imageTileSet);
|
||||
void onComplete(ImageTileSet imageTileSet, int pageHeight);
|
||||
void onError();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user