package com.video.ui.view.block; import android.content.Context; import android.graphics.*; import android.text.TextUtils; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import com.squareup.picasso.Picasso; import com.squareup.picasso.Transformation; import com.tv.ui.metro.model.DisplayItem; import com.video.ui.R; /** * Created by liuhuadong on 11/18/14. * main copy from miuivideo */ public class CategoryBlockView extends BaseCardView implements DimensHelper { public CategoryBlockView(Context context, DisplayItem item, Object tag) { this(context, null, 0); setTag(R.integer.picasso_tag, tag); initUI(item); } public CategoryBlockView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } private CornerUpImageView mPosterView; private ImageView postImage; private ImageView mIconView; private TextView mNameView; private TextView mCountView; private TextView mMediaView; private void initUI(final DisplayItem item){ this.item = item; int width = getContext().getResources().getDimensionPixelSize(R.dimen.category_media_view_width); int imageHeight = getContext().getResources().getDimensionPixelSize(R.dimen.category_media_poster_height); View mContentView = View.inflate(getContext(), R.layout.category_item, null); FrameLayout.LayoutParams contentParams = new FrameLayout.LayoutParams(width, FrameLayout.LayoutParams.WRAP_CONTENT); addView(mContentView, contentParams); mPosterView = (CornerUpImageView) mContentView.findViewById(R.id.category_media_poster); mPosterView.setRadius(getResources().getDimensionPixelSize(R.dimen.video_common_radius_9)); mIconView = (ImageView) mContentView.findViewById(R.id.category_media_desc_icon); Picasso.with(getContext()).load(item.images.icon().url).placeholder(R.drawable.category_icon_default).error(R.drawable.category_icon_default).fit().into(mIconView); if(item.images.get("left_top_corner") != null && TextUtils.isEmpty(item.images.get("left_top_corner").url) == false) { Picasso.with(getContext()).load(item.images.get("left_top_corner").url).placeholder(R.drawable.category_icon_default).error(R.drawable.category_icon_default).fit().into(mPosterView); } mNameView = (TextView) mContentView.findViewById(R.id.category_media_desc_name); mNameView.setText(item.title); mCountView = (TextView) mContentView.findViewById(R.id.category_media_desc_count); mCountView.setText(item.sub_title); mMediaView = (TextView) mContentView.findViewById(R.id.category_media_desc_media); mMediaView.setText(item.desc); postImage = (ImageView) mContentView.findViewById(R.id.poster_bg); Picasso.with(getContext()).load(item.images.get("poster").url).resize(width, imageHeight).transform(new Round_Corners(getContext(), 4, 4, true)).into(postImage); mContentView.setClickable(true); mContentView.findViewById(R.id.category_media_click).setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { launcherAction(getContext(), item); } }); } private static Dimens mDimens; @Override public Dimens getDimens() { if(mDimens == null){ mDimens = new Dimens(); mDimens.width = getResources().getDimensionPixelSize(R.dimen.category_media_view_width); mDimens.height = getResources().getDimensionPixelSize(R.dimen.category_media_view_height); } return mDimens; } @Override public void invalidateUI() { Picasso.with(getContext()).load(item.images.icon().url).tag(getTag(R.integer.picasso_tag)).placeholder(R.drawable.category_icon_default).error(R.drawable.category_icon_default).fit().into(mIconView); Picasso.with(getContext()).load(item.images.get("left_top_corner").url).tag(getTag(R.integer.picasso_tag)).placeholder(R.drawable.category_icon_default).error(R.drawable.category_icon_default).fit().into(mPosterView); Picasso.with(getContext()).load(item.images.get("poster").url).fit().transform(new Round_Corners(getContext(), 4, 4, true)).into(postImage); } @Override public void unbindDrawables(View view) { } public static class Round_Corners implements Transformation { private int Round; private boolean justTopEffect; Round_Corners(Context context, int margin, int Round, boolean justTop) { this.Round = dpToPx(context, Round); justTopEffect = justTop; } public int dpToPx(Context context, int dp) { DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); int px = Math.round(dp* (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT)); return px; } @Override public String key() { return "Round" + Round; } @Override public Bitmap transform(Bitmap arg0) { return getRoundedTopLeftCornerBitmap(arg0); } public Bitmap getRoundedTopLeftCornerBitmap(Bitmap bitmap) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); final float Px = Round; final Rect bottomRect = new Rect(0, bitmap.getHeight()/(justTopEffect?2:1), bitmap.getWidth(), bitmap.getHeight()); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, Px, Px, paint); // Fill in upper right corner // canvas.drawRect(topRightRect, paint); // Fill in bottom corners canvas.drawRect(bottomRect, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); if (bitmap != output) { bitmap.recycle(); } return output; } } }