package com.ypx.imagepicker.widget; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.Typeface; import android.graphics.drawable.BitmapDrawable; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.WindowManager; import android.widget.ImageView; import com.ypx.imagepicker.R; import com.ypx.imagepicker.bean.ImageItem; /** * 可以根据宽高和类型动态显示长图和gif图标签 *

* yangpeixing on 2017/12/7 16:40 */ @SuppressLint("AppCompatCustomView") public class ShowTypeImageView extends ImageView { public static final int TYPE_GIF = 1;//gif图片 public static final int TYPE_LONG = 2;//长图 public static final int TYPE_NONE = 3;//正常图 public static final int TYPE_VIDEO = 5;//视频 public static final int TYPE_IMAGECOUNT = 4;//数量 protected int imageType = TYPE_NONE; private String imageCountTip = ""; private boolean isSelect = false; public ShowTypeImageView(Context context) { super(context); init(); } public ShowTypeImageView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public ShowTypeImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } public void setType(int type) { this.imageType = type; invalidate(); } public void setSelect(boolean isSelect, int selectColor) { this.isSelect = isSelect; mSelectPaint.setColor(selectColor); invalidate(); } private Paint mCirclePaint; private Paint mMaskPaint; private Paint mBitmapPaint; private Paint mTextPaint; private RectF rectF; private Paint mSelectPaint; private Bitmap videoBitmap; private void init() { mCirclePaint = new Paint(); mCirclePaint.setAntiAlias(true); mCirclePaint.setColor(Color.parseColor("#ffffff")); mCirclePaint.setAlpha(200); mMaskPaint = new Paint(); mMaskPaint.setAntiAlias(true); mMaskPaint.setColor(Color.parseColor("#40000000")); mBitmapPaint = new Paint(); mBitmapPaint.setAntiAlias(true); mTextPaint = new Paint(); mTextPaint.setAntiAlias(true); mTextPaint.setColor(Color.parseColor("#90000000")); mTextPaint.setTextSize(sp(12)); mTextPaint.setTypeface(Typeface.DEFAULT_BOLD); rectF = new RectF(); mSelectPaint = new Paint(); mSelectPaint.setAntiAlias(true); mSelectPaint.setStrokeWidth(dp(4)); mSelectPaint.setStyle(Paint.Style.STROKE); try { videoBitmap = ((BitmapDrawable) getResources().getDrawable(R.mipmap.picker_item_video)).getBitmap(); } catch (Exception ignored) { } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (isSelect) { canvas.drawRect(0, 0, getWidth(), getHeight(), mSelectPaint); } if (imageType == TYPE_NONE) { return; } int width = getWidth(); int height = getHeight(); switch (imageType) { case TYPE_VIDEO: if (videoBitmap != null) { canvas.drawRect(0, 0, width, height, mMaskPaint); canvas.drawBitmap(videoBitmap, (width - videoBitmap.getWidth()) >> 1, (height - videoBitmap.getHeight()) >> 1, mBitmapPaint); } break; case TYPE_GIF: canvas.drawCircle(width >> 1, height >> 1, width * 0.18f, mCirclePaint); canvas.drawText("GIF", (width >> 1) - dp(10), (height >> 1) + dp(5), mTextPaint); break; case TYPE_LONG: rectF.left = width - dp(30); rectF.top = height - dp(20); rectF.right = width + dp(3); rectF.bottom = height; canvas.drawRoundRect(rectF, dp(3), dp(3), mCirclePaint); canvas.drawText("长图", width - dp(27), height - dp(6), mTextPaint); break; case TYPE_IMAGECOUNT: rectF.left = width - dp(30); rectF.top = height - dp(20); rectF.right = width + dp(3); rectF.bottom = height; canvas.drawRoundRect(rectF, dp(3), dp(3), mCirclePaint); canvas.drawText(imageCountTip, width - dp(27), height - dp(6), mTextPaint); break; } } public int sp(float spValue) { final float fontScale = getContext().getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); } public void setImageCountTip(String imageCountTip) { this.imageCountTip = imageCountTip; this.imageType = TYPE_IMAGECOUNT; invalidate(); } public void setTypeFromImage(ImageItem imageItem) { if (imageType == TYPE_IMAGECOUNT) { return; } if (imageItem.isVideo()) { setType(TYPE_VIDEO); } else if (imageItem.isGif()) { setType(TYPE_GIF); } else if (imageItem.isLongImage()) { setType(TYPE_LONG); } else { setType(TYPE_NONE); } } /** * 获得屏幕高度 */ public int getScreenHeight() { WindowManager wm = (WindowManager) getContext() .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); assert wm != null; wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.heightPixels; } public int dp(float dpVal) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal, this.getResources().getDisplayMetrics()); } }