•参考资料
[1]:菜鸟教程
[2]:bilibili视频教程
•src和blackground的区别
•scaleType设置缩放类型
•绘制圆形的ImageView
参考资料:Android中快速自定义圆形ImageView图形!
首先,新建一个 java class 并继承 AppCompatimageView 类;
在该类中放入如下代码:
1 import android.content.Context; 2 import android.graphics.Bitmap; 3 import android.graphics.BitmapShader; 4 import android.graphics.Canvas; 5 import android.graphics.Color; 6 import android.graphics.Matrix; 7 import android.graphics.Paint; 8 import android.graphics.Rect; 9 import android.graphics.Shader; 10 import android.graphics.drawable.BitmapDrawable; 11 import android.graphics.drawable.ColorDrawable; 12 import android.graphics.drawable.Drawable; 13 import android.util.AttributeSet; 14 15 import androidx.appcompat.widget.AppCompatimageView; 16 17 public class ImageViewPlus extends AppCompatimageView { 18 19 private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG); 20 private Bitmap mRawBitmap; 21 private BitmapShader mShader; 22 private Matrix mMatrix = new Matrix(); 23 24 public ImageViewPlus(Context context, AttributeSet attrs) { 25 super(context, attrs); 26 } 27 28 @Override 29 protected void onDraw(Canvas canvas) { 30 Bitmap rawBitmap = getBitmap(getDrawable()); 31 if (rawBitmap != null){ 32 int viewWidth = getWidth(); 33 int viewHeight = getHeight(); 34 int viewMinSize = Math.min(viewWidth, viewHeight); 35 float dstWidth = viewMinSize; 36 float dstHeight = viewMinSize; 37 if (mShader == null || !rawBitmap.equals(mRawBitmap)){ 38 mRawBitmap = rawBitmap; 39 mShader = new BitmapShader(mRawBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); 40 } 41 if (mShader != null){ 42 mMatrix.setScale(dstWidth / rawBitmap.getWidth(), dstHeight / rawBitmap.getHeight()); 43 mShader.setLocalMatrix(mMatrix); 44 } 45 mPaintBitmap.setShader(mShader); 46 float radius = viewMinSize / 2.0f; 47 canvas.drawCircle(radius, radius, radius, mPaintBitmap); 48 } 49 else { 50 super.onDraw(canvas); 51 } 52 } 53 54 private Bitmap getBitmap(Drawable drawable){ 55 if (drawable instanceof BitmapDrawable){ 56 return ((BitmapDrawable)drawable).getBitmap(); 57 } 58 else if (drawable instanceof ColorDrawable){ 59 Rect rect = drawable.getBounds(); 60 int width = rect.right - rect.left; 61 int height = rect.bottom - rect.top; 62 int color = ((ColorDrawable)drawable).getColor(); 63 Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 64 Canvas canvas = new Canvas(bitmap); 65 canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color)); 66 return bitmap; 67 } 68 else { 69 return null; 70 } 71 } 72 }ImageViewPlus.java然后,在你需要设置圆形 ImageView 空间的 .xml 代码中,将 <ImageView> 控件改成
<com.example.table.ImageViewPlus>;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。