ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android Studio 之 ImageView 学习笔记

2020-02-29 21:57:28  阅读:394  来源: 互联网

标签:缩放 import Studio graphics ImageView Android drawable android


 

•参考资料

  [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 类;

  在该类中放入如下代码:

 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>;

  其他的操作和 <ImageView> 操作一致,显示出来的图片就是圆形图片。

标签:缩放,import,Studio,graphics,ImageView,Android,drawable,android
来源: https://www.cnblogs.com/hyacinthLJP/p/12386386.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有