•参考资料
[1]:菜鸟教程
[2]:bilibili视频教程
•src和blackground的区别
- background通常指的都是背景,而src指的是内容
当使用 src 填入图片时,是按照图片大小直接填充,并不会进行拉伸
而使用 background 填入图片,则是会根据 ImageView 给定的宽度来进行拉伸
•scaleType设置缩放类型
- fitXY:对图像的长和宽进行独立缩放,使得该图片完全填充 ImageView,但是图片的长宽比可能会发生改变
fitStart:保持长宽比缩放图片,直到某一边与Image的某一边等长,缩放完成后将图片放在ImageView的左上角
fitCenter:同上,缩放后放于中间
fitEnd:同上,缩放后放于右下角
center:保持原图的大小,显示在ImageView的中心,当原图的 size 大于 ImageView 的 size,超过部分裁剪处理
centerCrop:保持长宽比缩放图片,直到完全覆盖 ImageView,可能会出现图片的显示不完全
centerInside:保持长宽比缩放图片,直到ImageView能够完全地显示图片
matrix:默认值,不改变原图的大小,从ImageView的左上角开始绘制原图, 原图超过ImageView的部分作裁剪处理
•绘制圆形的ImageView
参考资料:Android中快速自定义圆形ImageView图形!
首先,新建一个 java class 并继承 AppCompatImageView 类;
在该类中放入如下代码:
ImageViewPlus.java1 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 }然后,在你需要设置圆形 ImageView 空间的 .xml 代码中,将 <ImageView> 控件改成
<com.example.table.ImageViewPlus>;
其他的操作和 <ImageView> 操作一致,显示出来的图片就是圆形图片。