Drawing thumbnail background color for empty space in view.

- When showing landscape thumbnails in portrait, the thumbnails are
  aspect scaled to fit the width of the view, this change will draw
  a solid color to fill the other part so that we don't see the
  current edge-clamp texture effect.

Change-Id: Icf08239942f9179c66ba0f8d8ddd00f7d2a09d3c
This commit is contained in:
Winson
2016-02-04 12:53:46 -08:00
parent 9bbd2861ad
commit 3e85f9e48c

View File

@@ -25,6 +25,7 @@ import android.graphics.LightingColorFilter;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Region;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.view.View;
@@ -48,6 +49,7 @@ public class TaskViewThumbnail extends View {
float mDimAlpha;
Matrix mScaleMatrix = new Matrix();
Paint mDrawPaint = new Paint();
Paint mBgFillPaint = new Paint();
BitmapShader mBitmapShader;
LightingColorFilter mLightingColorFilter = new LightingColorFilter(0xffffffff, 0);
@@ -79,6 +81,7 @@ public class TaskViewThumbnail extends View {
mDrawPaint.setAntiAlias(true);
mCornerRadius = getResources().getDimensionPixelSize(
R.dimen.recents_task_view_rounded_corners_radius);
mBgFillPaint.setColor(Color.WHITE);
}
/**
@@ -100,10 +103,37 @@ public class TaskViewThumbnail extends View {
if (mInvisible) {
return;
}
// Draw the thumbnail with the rounded corners
canvas.drawRoundRect(0, 0, mTaskViewRect.width(), mTaskViewRect.height(),
mCornerRadius,
mCornerRadius, mDrawPaint);
if (mThumbnailRect.width() <= 0 || mThumbnailRect.height() <= 0 ||
mTaskViewRect.width() <= 0 || mTaskViewRect.height() <= 0) {
return;
}
int thumbnailHeight = (int) (((float) mTaskViewRect.width() / mThumbnailRect.width()) *
mThumbnailRect.height());
if (thumbnailHeight >= mTaskViewRect.height()) {
// The thumbnail fills the full task view bounds, so just draw it
canvas.drawRoundRect(0, 0, mTaskViewRect.width(), mTaskViewRect.height(),
mCornerRadius, mCornerRadius, mDrawPaint);
} else {
// The thumbnail only covers part of the task view bounds, so fill in the non-thumbnail
// space with the default background color. This is the equivalent of the GL border
// texture mode.
int count = canvas.save(Canvas.CLIP_SAVE_FLAG);
// Since we want the top corners to be rounded, just clip at the thumbnail height
canvas.clipRect(0, 0, mTaskViewRect.width(), thumbnailHeight, Region.Op.REPLACE);
canvas.drawRoundRect(0, 0, mTaskViewRect.width(), thumbnailHeight + mCornerRadius,
mCornerRadius, mCornerRadius, mDrawPaint);
// In the remaining space, draw the background color
canvas.clipRect(0, thumbnailHeight, mTaskViewRect.width(), mTaskViewRect.height(),
Region.Op.REPLACE);
canvas.drawRoundRect(0, thumbnailHeight - mCornerRadius, mTaskViewRect.width(),
mTaskViewRect.height(), mCornerRadius, mCornerRadius, mBgFillPaint);
canvas.restoreToCount(count);
}
}
/** Sets the thumbnail to a given bitmap. */