Android Studio 之 ImageView 學習筆記


 

•參考資料

  [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> 操作一致,顯示出來的圖片就是圓形圖片。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM