自定义圆形Imageview
来源:互联网 发布:货币资金管理优化论文 编辑:程序博客网 时间:2024/05/16 18:54
1:学习一定要善于总结,和敢于使用新的知识
2:一直使用的都是别人写好的控件,今天趁着国庆放假有时间,尝试自己写经常要用到的框架
3:知识总结:
一:用于创建canvas的bitmap不能是已经存在的bitmap
二:这个自定view中遇到一个坑就是图片的大小和遮罩大小不匹配是,需要我们对bitmap做伸缩处理,这个用到bitmapshader渲染器,它的使用很简单,只需要算出要画的图片的宽高和整个view的宽高比,用矩阵设置bitmapshader后,再用bitmapshader设置paint,最后使用
Rect destRect = new Rect(0,0,getWidth(),getHeight());Rect srcRect = new Rect(0,0,bitmap.getWidth(),bitmap.getHeight());canvas.drawBitmap(bitmap,srcRect,destRect,paint);将图片画出来这里的destRect代表画的目标区域大小,srcRect指的是原图片显示的位置
最后附上代码,当然如果是用于项目中,建议还是用开源的项目中的,本控件仅供大家学习参考,和本人练手
package com.xubaipei.viewlib;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapShader;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.Rect;import android.graphics.RectF;import android.graphics.Shader;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.support.v7.app.WindowDecorActionBar;import android.util.AttributeSet;import android.widget.ImageView;/** * Created by Administrator on 2016/10/6. */public class CircleImageView extends ImageView { public CircleImageView(Context context) { this(context,null); } public CircleImageView(Context context, AttributeSet attrs) { this(context, attrs,0); } public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(); } public void initView(){ } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec); int width = MeasureSpec.getSize(widthMeasureSpec); int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); BitmapDrawable drawable =(BitmapDrawable) getDrawable(); Bitmap bitmap = drawable.getBitmap(); if (widthSpecMode == MeasureSpec.AT_MOST){ width = bitmap.getWidth(); } if (heightSpecMode == MeasureSpec.AT_MOST){ height = bitmap.getHeight(); } int min = Math.min(width,height); setMeasuredDimension(min,min); } @Override protected void onDraw(Canvas canvas) { Paint paint = new Paint(); paint.setAntiAlias(true); paint.setStyle(Paint.Style.FILL); paint.setColor(Color.BLACK); Bitmap circleBitmap = getCircleBitmap(); canvas.drawBitmap(circleBitmap, 0, 0, paint); } public void drawCircle(Canvas canvas){ Paint paint = new Paint(); paint.setAntiAlias(true); paint.setStyle(Paint.Style.FILL); paint.setColor(Color.BLACK); canvas.drawCircle(getWidth() / 2, getHeight() / 2, getWidth() / 2, paint); } private void setShader(Bitmap bitmap,Paint paint){ int bitMinSize = Math.min(bitmap.getWidth(), bitmap.getHeight()); float scale = getWidth() * 1.0f/bitMinSize; Matrix matrix = new Matrix(); matrix.setScale(scale,scale); BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); shader.setLocalMatrix(matrix); paint.setShader(shader); } public Bitmap getCircleBitmap( ){ Paint paint = new Paint(); paint.setAntiAlias(true); paint.setStyle(Paint.Style.FILL); paint.setColor(Color.BLACK); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); Bitmap outBitmap = Bitmap.createBitmap(getWidth(),getHeight(), Bitmap.Config.ARGB_8888); BitmapDrawable drawable =(BitmapDrawable) getDrawable(); Bitmap bitmap = drawable.getBitmap(); setShader(bitmap, paint); Canvas canvas = new Canvas(outBitmap); drawCircle(canvas); Rect destRect = new Rect(0,0,getWidth(),getHeight()); Rect srcRect = new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()); canvas.drawBitmap(bitmap,srcRect,destRect,paint); return outBitmap; }}
0 0
- 圆形imageview自定义
- 自定义圆形ImageView
- 自定义android圆形ImageView
- android自定义圆形imageview
- 自定义圆形ImageView(一)
- 自定义圆形ImageView
- 自定义圆形ImageView
- 自定义圆形ImageView
- 自定义圆形ImageView
- 自定义圆形图片 ImageView
- 自定义圆形ImageView-简单
- 自定义圆形Imageview
- 自定义圆形ImageView
- 自定义圆形ImageView
- 自定义圆形imageview
- 自定义圆形的Imageview
- 自定义圆形ImageView
- 自定义圆形ImageView控件
- 正则表达式
- 字符串、向量和数组(二)
- android之ContentProvider(内容提供者)
- napi介绍
- Day23:Marriage
- 自定义圆形Imageview
- Java 代理学习笔记 —— Java Security Manager解析
- 几分钟内学习 Clojure
- 微信小程序开发常见问题分析
- 6. ZigZag Conversion
- 掘金技术论坛
- hdu 1575 矩阵幂对角线和
- HDU 2416 Treasure of the Chimp Island (BFS)
- 坚持#第59天~