Skip to content

Commit

Permalink
Merge pull request #6 from defer/ft-smooth-corners
Browse files Browse the repository at this point in the history
ScalingLayout: Use anti-alias on clipped corners
  • Loading branch information
iammert authored Oct 10, 2017
2 parents cf4265f + 080d1a4 commit 1800c77
Showing 1 changed file with 13 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
Expand Down Expand Up @@ -52,6 +55,7 @@ public class ScalingLayout extends FrameLayout {
*/
private Path path;
private RectF rectF;
private Paint maskPaint;

/**
* Animator to expand and collapse
Expand Down Expand Up @@ -97,6 +101,11 @@ public void init(Context context, AttributeSet attributeSet) {
path = new Path();
rectF = new RectF(0, 0, 0, 0);

maskPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
maskPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

setLayerType(LAYER_TYPE_HARDWARE, null);

valueAnimator = ValueAnimator.ofFloat(0, 0);
valueAnimator.setDuration(200);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
Expand Down Expand Up @@ -137,11 +146,12 @@ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
@Override
protected void dispatchDraw(Canvas canvas) {
int save = canvas.save();
path.reset();
path.addRoundRect(rectF, currentRadius, currentRadius, Path.Direction.CCW);
canvas.clipPath(path);
super.dispatchDraw(canvas);
canvas.restoreToCount(save);

path.reset();
path.addRoundRect(rectF, currentRadius, currentRadius, Path.Direction.CCW);
canvas.drawPath(path, maskPaint);
}

/**
Expand Down

0 comments on commit 1800c77

Please sign in to comment.