图文讲解Android的ImageView类中的ScaleType属性设置

ScaleType设置图解
图文相配很清晰的看出每个属性的效果,
感觉 CENTER_CROP 比较有用,长宽自动适应 ImageView ,整个图片自动缩略填充整个区域且居中显示(高宽不一定是view的尺寸),以前用JS在网页上实现的,在
android上一开始还在想要用java来自己实现这个效果太麻烦了,没想到系统自带方便多了

ImageView的Scaletype决定了图片在View上显示时的样子,如进行何种比例的缩放,及显示图片的整体还是部分,等等。
设置的方式包括:
1. 在layout xml中定义android:scaleType="CENTER"
2. 或在代码中调用imageView.setScaleType(ImageView.ScaleType.CENTER);

接下来,将对ScaleType的值和对应的显示效果用最直观的方式——真图演示的方法,来进行说明。

首先,是测试使用的原始图片:

(Dimensions: 128 * 128)

(Dimensions: 640 * 428)
好,开始下面的测试:
1.

SetScaleType(ImageView.ScaleType.CENTER);

按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示

2.

SetScaleType(ImageView.ScaleType.CENTER_CROP);

按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)

3.

setScaleType(ImageView.ScaleType.CENTER_INSIDE);

将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽

4.

setScaleType(ImageView.ScaleType.FIT_CENTER);

把图片按比例扩大/缩小到View的宽度,居中显示

5. FIT_START, FIT_END在图片缩放效果上与FIT_CENTER一样,只是显示的位置不同,FIT_START是置于顶部,FIT_CENTER居中,FIT_END置于底部。
在此就不给出示例了。
6. FIT_XY
不按比例缩放图片,目标是把图片塞满整个View。

实现图片宽度100%ImageView宽度且高度按比例自动伸缩
在ListView中为了实现图片宽度100%适应ImageView容器宽度,让高度自动按比例伸缩功能,查了很多资料,搞了一下午都没找出个现成的办法,不过貌似有个结论了,就是:
Android自身不能实现这样的效果,只有自己动手丰衣足食
使用scaleType 属性,设置图片在 view 中的缩放方式,本来以为 fit_center 可以实现,结果很无语,莫名其妙,没能实现宽度贴合容器宽度,两侧都是空白区域。
解决方法:
1.  还是要利用 scaleType 的  center_crop 效果,让图片能始终按比例填充容器,不留空白区域。
2.  剩下最主要的功能就是动态设置 ImageView 容器的高度了,这样让图片能尽可能的完整展现出来,而且还可以实现 maxHeight 的效果,如果图片高度比例过大不至于把列表拉的太长。

int maxHeight = ZUI.dp2px(mContext, 300);
int height = (int) ((float) view.getWidth()/drawable.getMinimumWidth() * drawable.getMinimumHeight());
if (height > maxHeight) height = maxHeight;
view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, height));

其中 view 即 ImageView 图片视图容器对象,drawable 就是要显示的图片资源。
drawable.getMinimumWidth()  和 drawable.getMinimumHeight() 是获取图片在屏幕上的可视高度宽度,不一定是图片的原始高宽度,跟屏幕的像素密度有关,大概就是这样子的吧。注意要用浮点数值类型,不然可能取整变成 1 的倍数了。

将 dp 值转为像素值,因为 java 代码中操作的高宽都是像素值,而样式中都是用 dip 来兼容屏幕的

public static int dp2px(Context context, int dp)
{
  float scale = context.getResources().getDisplayMetrics().density;
  return (int) (dp * scale + 0.5f);
}

ok 大概就是这样搞定了,顺便弄个测试结果图

其实 center_crop  可以简单的实现该功能的,但是他不会自动扩展高度,他应该用的是图片的可视高度为容器高度然后再进行容器覆盖显示,也就是说容器高度不会按比例增大,导致图片几乎只显示一半不到的样子,如果图片比较小,那几乎没办法用了,还是必须要动态调整,如果图片尺寸比较大,特别是高度合适的话就可以直接用的

(0)

相关推荐

  • 实例解析Android ImageView的scaleType属性

    这篇随笔将会简单的记录下ImageView这个控件的一些使用方法,以及其最重要的一个属性: scaleType ImageView这个控件是用来显示图片用的,例如我们可以通过下面这段xml配置来声明显示一张图片: <ImageView android:id="@+id/imageView" android:layout_width="100dp" android:layout_height="100dp" android:src="

  • Android 中ImageView的ScaleType使用方法

    Android 中ImageView的ScaleType使用方法 ImageView的ScaleType属性,表示的是ImageView中资源图片的填充方式.scaleType的属性值有好几种,分别是: matrix(默认) center centerCrop centerInside fitCenter fitEnd fitStart fitXY 这里要注意:matrix表示一种填充方式叫默认填充,如果布局和代码中不设置ScaleType属性,ImageView默认是fitCenter! 先上

  • ImageView的属性android:scaleType的作用分析

    在网上查了好多资料,大致都雷同,大家都是互相抄袭的,看着很费劲,不好理解,自己总结一下,留着需要看的话来查找.代码中的例子如下: 复制代码 代码如下: <ImageView            android:id="@+id/iv_bit_1"            android:layout_width="@dimen/passcode_width"            android:layout_height="@dimen/passc

  • Android中imageview.ScaleType使用方法详细介绍

    Android中imageview.ScaleType使用方法详细介绍 ScaleType属性用以表示显示图片的方式,共有8种取值: ScaleType.CENTER:图片大小为原始大小,如果图片大小大于ImageView控件,则截取图片中间部分,若小于,则直接将图片居中显示. ScaleType.CENTER_CROP:将图片等比例缩放,让图像的短边与ImageView的边长度相同,即不能留有空白,缩放后截取中间部分进行显示. ScaleType.CENTER_INSIDE:将图片大小大于Im

  • Android源码系列之深入理解ImageView的ScaleType属性

    做Android开发的童靴们肯定对系统自带的控件使用的都非常熟悉,比如Button.TextView.ImageView等.如果你问我具体使用,我会给说:拿ImageView来说吧,首先创建一个新的项目,在项目布局文件中应用ImageView控件,代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.

  • Android开发中ImageView的scaletype属性用法分析

    本文实例讲述了Android开发中ImageView的scaletype属性用法.分享给大家供大家参考,具体如下: ImageView的属性android:scaleType,即 ImageView.setScaleType(ImageView.ScaleType).android:scaleType是控制图片如何 resized/moved来匹对ImageView的size.ImageView.ScaleType / android:scaleType值的意义区别: CENTER /cente

  • 图文讲解Android的ImageView类中的ScaleType属性设置

    ScaleType设置图解 图文相配很清晰的看出每个属性的效果, 感觉 CENTER_CROP 比较有用,长宽自动适应 ImageView ,整个图片自动缩略填充整个区域且居中显示(高宽不一定是view的尺寸),以前用JS在网页上实现的,在 android上一开始还在想要用java来自己实现这个效果太麻烦了,没想到系统自带方便多了 ImageView的Scaletype决定了图片在View上显示时的样子,如进行何种比例的缩放,及显示图片的整体还是部分,等等. 设置的方式包括: 1. 在layou

  • Android 圆角 ImageView类可设置弧度(代码简单)

    废话不多说了,直接给大家贴代码了,具体代码如下所示: public class RoundImageView extends ImageView { private Paint paint; private int roundWidth = 50; private int roundHeight = 50; private Paint paint2; public RoundImageView(Context context, AttributeSet attrs, int defStyle)

  • Android在自定义类中实现自定义监听器方式

    监听器可以说是Android开发中最常用的东西之一.我们通过监听器可以监听对象的各种变化事件,并进行一些需要的处理,相当有用,而且使用起来也很简单.其实,监听器就相当于C++中的回调函数,达到条件就回调执行. 很多时候,我们在自定义控件类中也需要实现一些属性变化的监听器,实现跟原生控件监听器一样的功能.以下分几个步骤说明自定义监听器实现和使用(以自定义类MyClass加载完成监听器为例): 一.自定义监听器的实现: 1. 定义一个加载完成监听接口 //加载监听接口 public static i

  • 举例讲解Python面相对象编程中对象的属性与类的方法

    python 对象的属性 进入正题,来看一个实例来了解python中类,对象中公有属性,私有属性及局部变量,全局变量的区别. root@10.1.6.200:~# cat object.py #!/usr/bin/env python #coding:utf8 class Dave(): var1 = "class atribute,public atrribute var1" #类属性,公有属性var1 __var2 = "class self atribute __var

  • 在python的类中动态添加属性与生成对象

    本文将通过一下几个方面来一一进行解决 1.程序的主要功能 2.实现过程 3.类的定义 4.用生成器generator动态更新每个对象并返回对象 5.使用strip 去除不必要的字符 6.rematch匹配字符串 7.使用timestrptime提取字符串转化为时间对象 8.完整代码 程序的主要功能 现在有个存储用户信息的像表格一样的文档:第一行是属性,各个属性用逗号(,)分隔,从第二行开始每行是各个属性对应的值,每行代表一个用户.如何实现读入这个文档,每行输出一个用户对象呢? 另外还有4个小要求

  • Android编程中TextView字体属性设置方法(大小、字体、下划线、背景色)

    本文实例讲述了Android编程中TextView字体属性设置方法(大小.字体.下划线.背景色).分享给大家供大家参考,具体如下: import android.content.Context; import android.graphics.Color; import android.text.SpannableString; import android.text.Spanned; import android.text.style.AbsoluteSizeSpan; import andr

  • 谈谈Python:为什么类中的私有属性可以在外部赋值并访问

    Python:为什么类中的私有属性可以在外部赋值并访问? 问题引入 在慕课网上学习Python**类中的私有属性**的时候,看到了一个同学的提问: 将count改为__count,为什么实例变量在外部仍然可以修改__count?这里print p1.__count可以打印出100 class Person(object): __count = 0 def __init__(self, name): Person.__count = Person.__count + 1 self.name = n

  • 实例讲解Android多线程应用开发中Handler的使用

    其实可以理解Handler为主线程和另外的线程之间进行数据更新的东东,并且Handler在主线程中,并在Handler直接调用线程的run方法 package com.Handler02; import android.app.Activity; import android.os.Bundle; import android.os.Handler; public class Handler02Activity extends Activity { /** Called when the act

  • PHP获取类中常量,属性,及方法列表的方法

    复制代码 代码如下: $r = new ReflectionClass($this); Zend_Debug::dump($r->getConstants(), "Constants"); Zend_Debug::dump($r->getProperties(), "Properties"); Zend_Debug::dump($r->getMethods(), "Methods");

随机推荐