Loading packages/SystemUI/src/com/android/systemui/screenshot/MagnifierView.java +34 −4 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.systemui.screenshot; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.annotation.NonNull; import android.content.Context; import android.content.res.TypedArray; Loading @@ -28,6 +30,7 @@ import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.ViewPropertyAnimator; import androidx.annotation.Nullable; Loading @@ -35,7 +38,7 @@ import com.android.systemui.R; /** * MagnifierView shows a full-res cropped circular display of a given ImageTileSet, contents and * positioning dereived from events from a CropView to which it listens. * positioning derived from events from a CropView to which it listens. * * Not meant to be a general-purpose magnifier! */ Loading @@ -57,6 +60,20 @@ public class MagnifierView extends View implements CropView.CropInteractionListe private float mLastCropPosition; private CropView.CropBoundary mCropBoundary; private ViewPropertyAnimator mTranslationAnimator; private final Animator.AnimatorListener mTranslationAnimatorListener = new AnimatorListenerAdapter() { @Override public void onAnimationCancel(Animator animation) { mTranslationAnimator = null; } @Override public void onAnimationEnd(Animator animation) { mTranslationAnimator = null; } }; public MagnifierView(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } Loading Loading @@ -133,6 +150,8 @@ public class MagnifierView extends View implements CropView.CropInteractionListe public void onCropMotionEvent(MotionEvent event, CropView.CropBoundary boundary, float cropPosition, int cropPositionPx) { mCropBoundary = boundary; boolean touchOnRight = event.getX() > getParentWidth() / 2; float translateXTarget = touchOnRight ? 0 : getParentWidth() - getWidth(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mLastCropPosition = cropPosition; Loading @@ -144,11 +163,22 @@ public class MagnifierView extends View implements CropView.CropInteractionListe setAlpha(0f); setTranslationX((getParentWidth() - getWidth()) / 2); setVisibility(View.VISIBLE); boolean touchOnRight = event.getX() > getParentWidth() / 2; float translateXTarget = touchOnRight ? 0 : getParentWidth() - getWidth(); animate().alpha(1f).translationX(translateXTarget).scaleX(1f).scaleY(1f).start(); mTranslationAnimator = animate().alpha(1f).translationX(translateXTarget).scaleX(1f).scaleY(1f); mTranslationAnimator.setListener(mTranslationAnimatorListener); mTranslationAnimator.start(); break; case MotionEvent.ACTION_MOVE: // The touch is near the middle if it's within 10% of the center point. // We don't want to animate horizontally if the touch is near the middle. boolean nearMiddle = Math.abs(event.getX() - getParentWidth() / 2) < getParentWidth() / 10f; boolean viewOnLeft = getTranslationX() < (getParentWidth() - getWidth()) / 2; if (!nearMiddle && viewOnLeft != touchOnRight && mTranslationAnimator == null) { mTranslationAnimator = animate().translationX(translateXTarget); mTranslationAnimator.setListener(mTranslationAnimatorListener); mTranslationAnimator.start(); } mLastCropPosition = cropPosition; setTranslationY(cropPositionPx - getHeight() / 2); invalidate(); Loading Loading
packages/SystemUI/src/com/android/systemui/screenshot/MagnifierView.java +34 −4 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.systemui.screenshot; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.annotation.NonNull; import android.content.Context; import android.content.res.TypedArray; Loading @@ -28,6 +30,7 @@ import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.ViewPropertyAnimator; import androidx.annotation.Nullable; Loading @@ -35,7 +38,7 @@ import com.android.systemui.R; /** * MagnifierView shows a full-res cropped circular display of a given ImageTileSet, contents and * positioning dereived from events from a CropView to which it listens. * positioning derived from events from a CropView to which it listens. * * Not meant to be a general-purpose magnifier! */ Loading @@ -57,6 +60,20 @@ public class MagnifierView extends View implements CropView.CropInteractionListe private float mLastCropPosition; private CropView.CropBoundary mCropBoundary; private ViewPropertyAnimator mTranslationAnimator; private final Animator.AnimatorListener mTranslationAnimatorListener = new AnimatorListenerAdapter() { @Override public void onAnimationCancel(Animator animation) { mTranslationAnimator = null; } @Override public void onAnimationEnd(Animator animation) { mTranslationAnimator = null; } }; public MagnifierView(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } Loading Loading @@ -133,6 +150,8 @@ public class MagnifierView extends View implements CropView.CropInteractionListe public void onCropMotionEvent(MotionEvent event, CropView.CropBoundary boundary, float cropPosition, int cropPositionPx) { mCropBoundary = boundary; boolean touchOnRight = event.getX() > getParentWidth() / 2; float translateXTarget = touchOnRight ? 0 : getParentWidth() - getWidth(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mLastCropPosition = cropPosition; Loading @@ -144,11 +163,22 @@ public class MagnifierView extends View implements CropView.CropInteractionListe setAlpha(0f); setTranslationX((getParentWidth() - getWidth()) / 2); setVisibility(View.VISIBLE); boolean touchOnRight = event.getX() > getParentWidth() / 2; float translateXTarget = touchOnRight ? 0 : getParentWidth() - getWidth(); animate().alpha(1f).translationX(translateXTarget).scaleX(1f).scaleY(1f).start(); mTranslationAnimator = animate().alpha(1f).translationX(translateXTarget).scaleX(1f).scaleY(1f); mTranslationAnimator.setListener(mTranslationAnimatorListener); mTranslationAnimator.start(); break; case MotionEvent.ACTION_MOVE: // The touch is near the middle if it's within 10% of the center point. // We don't want to animate horizontally if the touch is near the middle. boolean nearMiddle = Math.abs(event.getX() - getParentWidth() / 2) < getParentWidth() / 10f; boolean viewOnLeft = getTranslationX() < (getParentWidth() - getWidth()) / 2; if (!nearMiddle && viewOnLeft != touchOnRight && mTranslationAnimator == null) { mTranslationAnimator = animate().translationX(translateXTarget); mTranslationAnimator.setListener(mTranslationAnimatorListener); mTranslationAnimator.start(); } mLastCropPosition = cropPosition; setTranslationY(cropPositionPx - getHeight() / 2); invalidate(); Loading