Pass densityDpi into RippleComponent, store as densityScale
Fixes a regression where the foreground was created against the density in DPI rather than as a scale factor. Bug: 25602850 Change-Id: Ia871aa5def4319682a73228efb599f31b65afdb6
This commit is contained in:
@@ -20,6 +20,7 @@ import android.animation.Animator;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Rect;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.DisplayListCanvas;
|
||||
import android.view.RenderNodeAnimator;
|
||||
|
||||
@@ -50,7 +51,7 @@ abstract class RippleComponent {
|
||||
protected float mTargetRadius;
|
||||
|
||||
/** Screen density used to adjust pixel-based constants. */
|
||||
protected float mDensity;
|
||||
protected float mDensityScale;
|
||||
|
||||
/**
|
||||
* If set, force all ripple animations to not run on RenderThread, even if it would be
|
||||
@@ -71,7 +72,7 @@ abstract class RippleComponent {
|
||||
}
|
||||
}
|
||||
|
||||
public final void setup(float maxRadius, float density) {
|
||||
public final void setup(float maxRadius, int densityDpi) {
|
||||
if (maxRadius >= 0) {
|
||||
mHasMaxRadius = true;
|
||||
mTargetRadius = maxRadius;
|
||||
@@ -79,7 +80,7 @@ abstract class RippleComponent {
|
||||
mTargetRadius = getTargetRadius(mBounds);
|
||||
}
|
||||
|
||||
mDensity = density;
|
||||
mDensityScale = densityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE;
|
||||
|
||||
onTargetRadiusChanged(mTargetRadius);
|
||||
}
|
||||
|
||||
@@ -160,7 +160,7 @@ public class RippleDrawable extends LayerDrawable {
|
||||
private Paint mRipplePaint;
|
||||
|
||||
/** Target density of the display into which ripples are drawn. */
|
||||
private float mDensity = 1.0f;
|
||||
private int mDensity;
|
||||
|
||||
/** Whether bounds are being overridden. */
|
||||
private boolean mOverrideBounds;
|
||||
@@ -544,8 +544,7 @@ public class RippleDrawable extends LayerDrawable {
|
||||
mBackground = new RippleBackground(this, mHotspotBounds, mForceSoftware);
|
||||
}
|
||||
|
||||
final float densityScale = mState.mDensity * DisplayMetrics.DENSITY_DEFAULT_SCALE;
|
||||
mBackground.setup(mState.mMaxRadius, densityScale);
|
||||
mBackground.setup(mState.mMaxRadius, mDensity);
|
||||
mBackground.enter(focused);
|
||||
}
|
||||
|
||||
|
||||
@@ -168,7 +168,7 @@ class RippleForeground extends RippleComponent {
|
||||
}
|
||||
|
||||
final int duration = (int)
|
||||
(1000 * Math.sqrt(mTargetRadius / WAVE_TOUCH_DOWN_ACCELERATION * mDensity) + 0.5);
|
||||
(1000 * Math.sqrt(mTargetRadius / WAVE_TOUCH_DOWN_ACCELERATION * mDensityScale) + 0.5);
|
||||
|
||||
final ObjectAnimator tweenRadius = ObjectAnimator.ofFloat(this, TWEEN_RADIUS, 1);
|
||||
tweenRadius.setAutoCancel(true);
|
||||
@@ -204,7 +204,7 @@ class RippleForeground extends RippleComponent {
|
||||
private int getRadiusExitDuration() {
|
||||
final float remainingRadius = mTargetRadius - getCurrentRadius();
|
||||
return (int) (1000 * Math.sqrt(remainingRadius / (WAVE_TOUCH_UP_ACCELERATION
|
||||
+ WAVE_TOUCH_DOWN_ACCELERATION) * mDensity) + 0.5);
|
||||
+ WAVE_TOUCH_DOWN_ACCELERATION) * mDensityScale) + 0.5);
|
||||
}
|
||||
|
||||
private float getCurrentRadius() {
|
||||
|
||||
Reference in New Issue
Block a user