Fix default stroke width and NPE for line with no stroke width

Also fixes restart on visiblity change in AnimationDrawable

BUG: 15437284
Change-Id: I698e7ffb11489061a38fbcd5cea10ba11a6abb34
This commit is contained in:
Alan Viverette
2014-06-05 13:43:25 -07:00
parent 03b62b3c7f
commit 3b983a74c6
2 changed files with 12 additions and 6 deletions

View File

@@ -94,7 +94,7 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An
boolean changed = super.setVisible(visible, restart);
if (visible) {
if (changed || restart) {
setFrame(0, true, mCurFrame >= 0);
setFrame(0, true, restart || mCurFrame >= 0);
}
} else {
unscheduleSelf(this);

View File

@@ -1203,8 +1203,11 @@ public class GradientDrawable extends Drawable {
st.mAttrStroke = a.extractThemeAttrs();
// We have an explicit stroke defined, so the default stroke width
// must be at least 0 or the current stroke width.
final int defaultStrokeWidth = Math.max(0, st.mStrokeWidth);
final int width = a.getDimensionPixelSize(
R.styleable.GradientDrawableStroke_width, st.mStrokeWidth);
R.styleable.GradientDrawableStroke_width, defaultStrokeWidth);
final float dashWidth = a.getDimension(
R.styleable.GradientDrawableStroke_dashWidth, st.mStrokeDashWidth);
@@ -1406,10 +1409,13 @@ public class GradientDrawable extends Drawable {
outline.setOval(bounds);
return true;
case LINE:
float halfStrokeWidth = mStrokePaint.getStrokeWidth() * 0.5f;
float centerY = bounds.centerY();
int top = (int) Math.floor(centerY - halfStrokeWidth);
int bottom = (int) Math.ceil(centerY + halfStrokeWidth);
// Hairlines (0-width stroke) must have a non-empty outline for
// shadows to draw correctly, so we'll use a very small width.
final float halfStrokeWidth = mStrokePaint == null ?
0.0001f : mStrokePaint.getStrokeWidth() * 0.5f;
final float centerY = bounds.centerY();
final int top = (int) Math.floor(centerY - halfStrokeWidth);
final int bottom = (int) Math.ceil(centerY + halfStrokeWidth);
outline.setRect(bounds.left, top, bounds.right, bottom);
return true;