• Android ImageView属性


    ImageView 继承自View组件,主要功能是用于显示图片,实际上它不仅仅可以用来显示图片,任何Drawable对象都可以使用ImageView来显示。ImageView可以适用于任何布局中,并且Android为其提供了缩放和着色的一些操作。

    1. foreground、src 和 background 属性区别

    1)background指的是背景,foreground指的是前景,而src指的是内容;三者可以同时使用;
    2)src填入图片时,是按照图片大小直接填充,并不会进行拉伸;而使用backgroundforeground填入图片,则是会根据ImageView给定的宽度来进行拉伸;
    3)backgroundforeground是所有view都有的属性,总是缩放到view的大小,不受scaleType影响;而src是ImageView特有属性,它会受到scaleType的影响。

    举个栗子:

    <ImageView
            android:layout_width="260dp"
            android:layout_height="260dp"      
            android:foreground="#99000000"      
            android:background="#ff0000"       
            android:src="@mipmap/ic_launcher"/>
    

    效果图:

     
    前背景效果图

    从图上可以看出,虽然foregroundsrc都为前景,但是foreground却在src之上。从层级上比较:foreground>src>background

    2. adjustViewBounds属性用法

    ImageView为我们提供了adjustViewBounds属性,用于设置缩放时是否保持原图长宽比。 adjustViewBounds详细介绍,请移驾 —— 《Android辟谣篇 —— ImageView宽高自适应》

    3. 设置透明度

    ImageView 设置透明度主要有以下几种方法:

    • android:alpha // 0f~1f
    • setAlpha(float alpha); // 0f~1f
    • setAlpha(int alpha); // 0~255,已过时
    • setImageAlpha(int alpha); // API>=16
    4. 设置图片方式

    1)设置前景

    • foreground

    xml布局中:

    android:foreground="@color/blue"
    android:foreground="@mipmap/ic_launcher"
    android:src="@mipmap/ic_launcher"
    

    Java代码中:

    // 设置前景图
    image.setForeground(getResources().getDrawable(R.mipmap.ic_launcher));
    // 设置前景色
    image.setForeground(getResources().getDrawable(R.color.blue));
    

    注意:
    关于设置foreground无效问题,View源码片段:

    case R.styleable.View_foreground:
        if (targetSdkVersion >= VERSION_CODES.M || this instanceof FrameLayout) {
            setForeground(a.getDrawable(attr));
        }
    break;
      
    

    foreground属性只有在以下两种情况下生效:
    (1) Android M版本(6.0)及以上 ;
    (2) FrameLayout本身及其子类。

    • src

    xml布局中:

    android:src="@mipmap/ic_launcher"
    

    Java代码中:

    // 1. setImageDrawable(Drawable drawable)
    image.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher)); //不会变形 
    // 2. setImageBitmap(Bitmap bm)
    Stringpath=Environment.getExternalStorageDirectory()+File.separator+”test.jpg”; 
    Bitmap bm = BitmapFactory.decodeFile(path); 
    image.setImageBitmap(bm);//不会变形 
    // 3. setImageResource(int resId)
    image.setImageResource(R.drawable.ic_launcher);//不会变形 
    

    2)设置背景

    xml布局中:

    android:background="@mipmap/ic_launcher"
    android:background="@color/blue"
    

    Java代码中:

    // 1. setBackground(Drawable background)
    image.setBackground(getResources().getDrawable(R.drawable.ic_launcher));//变形 
    // 2. setBackgroundResource(int resid)
    image.setBackgroundResource(R.drawable.ic_launcher);//变形 
    // 3. setBackgroundDrawable(Drawable background)
    image.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_launcher));//变形 
    
    // setBackgroundColor(int color) 
    image.setBackgroundColor(getResources().getColor(R.color.blue));
    
    5. ScaleType属性

    android:scaleType用于设置显示的图片如何缩放或者移动以适应ImageView的大小,Java代码中可以通过imageView.setScaleType(ImageView.ScaleType.CENTER);来设置。 可选值如下:

    • MATRIX / matrix:用矩阵的方式绘制,从ImageView的左上角开始绘制原图,不缩放图片, 超过ImageView部分作裁剪处理;
    • CENTER / center:保持原图的大小,显示在ImageView的中心。当原图的尺寸大于ImageView的尺寸,超过部分裁剪处理;
    • CENTER_CROP / centerCrop:保持横纵比缩放图片,直到完全覆盖ImageView为止(指的是ImageView的宽和高都要填满),原图超过ImageView的部分作裁剪处理;
    • CENTER_INSIDE / centerInside:将图片的内容完整居中显示,通过按比例缩小原图尺寸的宽高等于或小于ImageView的宽高。如果原图的尺寸本身就小于ImageView的尺寸,则原图的尺寸不作任何处理,居中显示在ImageView;
    • FIT_XY / fitXY:把原图宽高进行不保持原比例放缩,直到填充满ImageView为止;
    • FIT_START / fitStart:把原图按比例放缩使之等于ImageView的宽高,缩放完成后将图片放在ImageView的左上角;
    • FIT_CENTER / fitCenter:把原图按比例放缩使之等于ImageView的宽高使之居中显示,缩放后放于中间;
    • FIT_END / fitEnd:把原图按比例放缩到ImageView的宽高,缩放完成后将图片放在ImageView的右下角。
     
    ScaleType属性效果图
    参考

    ImageView官方文档,开启传送门



    作者:翻译不了的声响
    链接:https://www.jianshu.com/p/7d713775df9f
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    2020牛客暑期多校训练营(第五场)D 思维|最长上升子序列
    codeforces-1343E(贪心+BFS)
    2020牛客暑期多校训练营(第三场)C 计算几何
    codeforces-1385E(拓扑排序)
    2020牛客寒假算法基础训练营2
    2020牛客寒假算法基础训练营1
    codeforces-1295D(欧拉函数)
    codeforces-1283D(多源BFS)
    深入理解JVM之JVM内存区域与内存分配
    属性动画详解一(Property Animation)
  • 原文地址:https://www.cnblogs.com/Alex80/p/11875751.html
Copyright © 2020-2023  润新知