•參考資料
[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圖形!
首先,新建一個 CircleImageView.java 文件,並繼承 AppCompatImageView 類,添加代碼如下:
public class CircleImageView extends AppCompatImageView { private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG); private Bitmap mRawBitmap; private BitmapShader mShader; private Matrix mMatrix = new Matrix(); public CircleImageView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { Bitmap rawBitmap = getBitmap(getDrawable()); if (rawBitmap != null) { int viewWidth = getWidth(); int viewHeight = getHeight(); int viewMinSize = Math.min(viewWidth, viewHeight); float dstWidth = viewMinSize; float dstHeight = viewMinSize; if (mShader == null || !rawBitmap.equals(mRawBitmap)) { mRawBitmap = rawBitmap; mShader = new BitmapShader(mRawBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); } if (mShader != null) { mMatrix.setScale(dstWidth / rawBitmap.getWidth(), dstHeight / rawBitmap.getHeight()); mShader.setLocalMatrix(mMatrix); } mPaintBitmap.setShader(mShader); float radius = viewMinSize / 2.0f; canvas.drawCircle(radius, radius, radius, mPaintBitmap); } else { super.onDraw(canvas); } } private Bitmap getBitmap(Drawable drawable) { if (drawable instanceof BitmapDrawable) { return ((BitmapDrawable) drawable).getBitmap(); } else if (drawable instanceof ColorDrawable) { Rect rect = drawable.getBounds(); int width = rect.right - rect.left; int height = rect.bottom - rect.top; int color = ((ColorDrawable) drawable).getColor(); Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color)); return bitmap; } else { return null; } } }然后,在你需要設置圓形 ImageView 控件的 .xml 代碼中,將 <ImageView> 控件改成
<com.example.uibestpractice.CircleImageView>;
其中,com.example.uibestpractice 是 CircleImageView.java 文件所在的包名;
其他的操作和 <ImageView> 操作一致,顯示出來的圖片就是圓形圖片。