zoukankan      html  css  js  c++  java
  • 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
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    BNUOJ 12756 Social Holidaying(二分匹配)
    HDU 1114 Piggy-Bank(完全背包)
    HDU 2844 Coins (多重背包)
    HDU 2602 Bone Collector(01背包)
    HDU 1171 Big Event in HDU(01背包)
    HDU 2571 命运 (入门dp)
    HDU 1069 Monkey and Banana(最长递减子序列)
    HDU 1160 FatMouse's Speed (最长上升子序列)
    HDU 2594 KMP
    POJ 3783 Balls --扔鸡蛋问题 经典DP
  • 原文地址:https://www.cnblogs.com/Alex80/p/11875751.html
Copyright © 2011-2022 走看看