package org.xbmc.android.remote.presentation.widget; import org.xbmc.api.business.IManager; import org.xbmc.api.type.MediaType; import org.xbmc.api.type.ThumbSize; import org.xbmc.api.type.ThumbSize.Dimension; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Rect; import android.graphics.Paint.Align; import android.graphics.drawable.Drawable; public class FlexibleItemView extends FiveLabelsItemView { private int POSTER_FORMAT = Dimension.PORTRAIT; public FlexibleItemView(Context context, IManager manager, int width, Bitmap defaultCover, Drawable selection, boolean fixedSize) { super(context, manager, width, defaultCover, selection, fixedSize); } protected void onDraw(Canvas canvas) { if (mCover != null && !mCover.isRecycled()) { drawPoster(canvas, posterWidth, posterHeight, mWidth); drawPosterOverlay(canvas, posterWidth, posterHeight); switch (POSTER_FORMAT) { case Dimension.SQUARE: case Dimension.PORTRAIT: drawPortrait(canvas); break; case Dimension.LANDSCAPE: drawLandscape(canvas, posterWidth); break; case Dimension.BANNER: drawBanner(canvas); break; default: } } else { super.onDraw(canvas); } } private void drawPortrait(Canvas canvas) { drawPortraitText(canvas); } /** * Draws text labels for landscape text view * <pre> * ,----------. * | | title (big) * | | subtitle subtitleRight * `----------' * </pre> * @param canvas Canvas to draw on */ private void drawLandscape(Canvas canvas, int drawWidth) { final int width = mWidth; final boolean isSelected = isSelected() || isPressed(); // init paint PAINT.setTextAlign(Align.LEFT); PAINT.setColor(Color.WHITE); PAINT.setFakeBoldText(false); PAINT.setTextAlign(Align.LEFT); PAINT.setAntiAlias(true); // title if (title != null) { PAINT.setColor(isSelected ? Color.WHITE : Color.BLACK); PAINT.setTextSize(size18); canvas.drawText(ellipse(title, width - drawWidth + padding), drawWidth + padding, size25, PAINT); } // subtitle right PAINT.setColor(isSelected ? Color.WHITE : Color.rgb(80, 80, 80)); PAINT.setTextSize(size12); PAINT.setTextAlign(Align.RIGHT); float subtitleRightWidth = 0; if (subtitleRight != null) { subtitleRightWidth = PAINT.measureText(subtitleRight); canvas.drawText(subtitleRight, width - padding, size42, PAINT); } // subtitle PAINT.setColor(isSelected ? Color.WHITE : Color.rgb(80, 80, 80)); PAINT.setTextSize(size12); PAINT.setTextAlign(Align.LEFT); PAINT.setFakeBoldText(false); if (subtitle != null) { canvas.drawText(ellipse(subtitle, width - (int)subtitleRightWidth - size50), drawWidth + padding, size42, PAINT); } } private void drawBanner(Canvas canvas) { } public void setCover(Bitmap cover) { mCover = cover; if(mCover != null) { Dimension renderDim = ThumbSize.getTargetDimension(ThumbSize.SMALL, MediaType.VIDEO, mCover.getWidth(), mCover.getHeight()); posterWidth = renderDim.x; posterHeight = renderDim.y; posterRect = new Rect(0, 0, posterWidth, posterHeight); POSTER_FORMAT = renderDim.format; } else { posterWidth = ThumbSize.getPixel(ThumbSize.SMALL); posterHeight = (int)(posterWidth * ThumbSize.POSTER_AR); posterRect = new Rect(0, 0, posterWidth, posterHeight); POSTER_FORMAT = Dimension.PORTRAIT; } requestLayout(); invalidate(); } }