Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南

自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理

package cc.testscaletype;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.widget.ImageView;import android.widget.ImageView.ScaleType;/** * Demo描述: * * 详解ImageView的CENTER_CROP,CENTER_INSIDE,FIT_CENTER等属性 * * * * Demo说明: * * 1 准备三张大小不一的图片 * logo----->360*360 * dogs----->1024*682 * bdog----->1920*1080 * * 2 在布局文件中设置ImageView的大小为750px * * 3 为了便于对比理解,依次测试ImageView的各个属性 * * * * 原创作者: * 谷哥的小弟 * http://blog.csdn.net/lfdfhl * */public class MainActivity extends Activity {    private ImageView mImageView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mImageView = (ImageView) findViewById(R.id.iamgeView);        int logo_id=R.drawable.logo;        int dogs_id=R.drawable.dogs;        int bdog_id=R.drawable.bdog;        //testCenter(logo_id);        //testCenter(dogs_id);        //testCenter(bdog_id);        //testCenterCrop(logo_id);        //testCenterCrop(dogs_id);        //testCenterCrop(bdog_id);        //testCenterInside(logo_id);        //testCenterInside(dogs_id);        //testCenterInside(bdog_id);        testFitCenter(logo_id);        //testFitCenter(dogs_id);        //testFitCenter(bdog_id);        //testFitEnd(logo_id);        //testFitEnd(dogs_id);        //testFitEnd(bdog_id);        //testFitStart(logo_id);        //testFitStart(dogs_id);        //testFitStart(bdog_id);        //testFitXY(logo_id);        //testFitXY(dogs_id);        //testFitXY(bdog_id);    }    /** * 测试CENTER属性 * * 将图片显示在ImageView的中心点,不执行任何缩放 * * 1.1 若图片宽和高均小于ImageView控件的宽高,则图片显示在ImageView正中间 * 1.2 若图片宽或高大于ImageView控件的宽或高,则图片不会完整地显示 * * 即在此属性作用下: * 如果图片宽高均小于图片宽高,那么图片可以在ImageView中间完整地以原大小显示 * 如果图片的宽或者高大于ImageView大小,图片不可完整显示 * */    private void testCenter(int resourceID) {        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),resourceID);        System.out.println("---> width=" + bitmap.getWidth()+ " ,height=" + bitmap.getHeight());        mImageView.setScaleType(ScaleType.CENTER);        mImageView.setImageResource(resourceID);    }    /** * 测试CENTER_CROP属性 * * 将图片放在ImageView的中心点,然后对图片进行等比例缩放 * * 官方文档描述: * Scale the image uniformly (maintain the image's aspect ratio) so that * both dimensions (width and height) of the image will be equal to or larger * than the corresponding dimension of the view (minus padding). * 这段文字值得好好体会一下。 * 简而言之: * 等比例缩放图片使得图片的宽和高均不小于控件对应的宽高 * * 1.1 若图片宽和高均小于ImageView控件的宽高,则等比例放大图片,直至铺满ImageView. * 当然这种情况下的等比例放大,就可能导致图片X或Y方向的图片显示不全 * 1.2 若图片宽或高小于ImageView控件的宽或高,则将图片等比例放大直到铺满ImageView * 比如ImageView为750*750,图片为600*800,所以会等比例放大图片,直至图片宽度变为 * 750.但是这样会造成图片的高度大于了ImageView的高,所以图片的垂直方向显示不全,会被剪裁 * 1.3 如图片宽和高均大于ImageView控件的宽和高 * 此时等比例缩小图片,当图片的宽高中任意一值等于控件对应的宽高时停止缩小图片。 * 在这种情况下就很可能造成:图片显示不完整 * * 所以CENTER_CROP属性的显著特点: * 图片会铺满整个ImageView,但图片可能显示不完整 * */    private void testCenterCrop(int resourceID) {        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),resourceID);        System.out.println("---> width=" + bitmap.getWidth()+ " ,height=" + bitmap.getHeight());        mImageView.setScaleType(ScaleType.CENTER_CROP);        mImageView.setImageResource(resourceID);    }    /** * 测试CENTER_INSIDE属性 * * 将图片放在ImageView的中心点,然后对图片进行等比例缩放 * * 官方文档: * Scale the image uniformly (maintain the image's aspect ratio) so that * both dimensions (width and height) of the image will be equal to or less * than the corresponding dimension of the view (minus padding). * * 简而言之: * 等比例缩放图片使得图片的宽和高均不大于控件对应的宽高 * * 1.1 若图片宽和高均小于ImageView控件的宽高,则将图片放在ImageView中间。 * 此情况下,图片的四周可见ImageView的背景色 * 1.2 若图片宽或高大于ImageView控件的宽或高,则将图片等比例缩小直到ImageView可以完整显示该图片 * 此情况下,图片的上下或者左右可见ImageView的背景色 * 1.3 如图片宽和高均大于ImageView控件的宽和高 * 此情况下,等比例缩小图片使得图片的宽和高均不大于控件的宽高。 * 所以,这也很容易导致图片的上下或者左右可见ImageView的背景色 * * 至此,可见CENTER_INSIDE属性的特点 * 1 始终会完全显示整张图片 * 2 很可能导致ImageView控件留白,即露出背景色 * * * 到这就可以明显看出CENTER_CROP和CENTER_INSIDE的区别: * 1 CENTER_CROP 要求图片的宽高均不小于控件宽高 * 2 CENTER_INSIDE 要求图片的宽高均不大于控件宽高 * */    private void testCenterInside(int resourceID) {        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),resourceID);        System.out.println("---> width=" + bitmap.getWidth()+ " ,height=" + bitmap.getHeight());        mImageView.setScaleType(ScaleType.CENTER_INSIDE);        mImageView.setImageResource(resourceID);    }    /** * 测试FIT_CENTER属性 * * 将图片放在ImageView的中心点,然后对图片进行等比例缩放 * * 官方文档: * Scale the image using CENTER. * CENTER: * Compute a scale that will maintain the original src aspect ratio, * but will also ensure that src fits entirely inside dst. * At least one axis (X or Y) will fit exactly. The result is centered inside dst. * * 在理解了CENTER_CROP和CENTER_INSIDE之后再看FIT_CENTER就会好理解一些 * * 将图片放在ImageView的中心点,对图片进行等比例缩放从而完整地显示图片 * * * * 1.1 若图片宽和高均小于ImageView控件的宽高,则等比例放大图片 * 直到图片的宽高中任意一值等于控件的宽或者高 * 此情况下,图片的上下或者左右可见ImageView的背景色 * * * 1.2 若图片宽和高均大于ImageView控件的宽和高,则等比例缩小图片 * 直到图片的宽高中任意一值等于控件的宽或者高 * 所以,这也很容易导致图片的上下或者左右可见ImageView的背景色 * * 1.3 若图片宽或高大于ImageView控件的宽或高 * 这时候是该执行放大呢?还是缩小呢? * 其实,此时是有一个原则的:完整地显示图片。 * 就像文档中所说:ensure that src fits entirely inside dst * 所以,此时会对图片进行缩放,直到图片的宽高均不大于控件的宽高 * * * 所以,在使用FIT_CENTER时可以完整地显示图片,而且它有一个显著的特点: * 它使得图片的宽高中至少有一个值恰好等于控件的宽或者高。 * 这一点也是它和CENTER_INSIDE属性的主要区别 * * * */    private void testFitCenter(int resourceID) {        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),resourceID);        System.out.println("---> width=" + bitmap.getWidth()+ " ,height=" + bitmap.getHeight());        mImageView.setScaleType(ScaleType.FIT_CENTER);        mImageView.setImageResource(resourceID);    }    /** * 测试FIT_END属性 * * FIT_END和FIT_CENTER属性非常类似 * 差别在于,FIT_END最终会将缩放后的图片放在ImageView控件的右下角 */    private void testFitEnd(int resourceID) {        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),resourceID);        System.out.println("---> width=" + bitmap.getWidth()+ " ,height=" + bitmap.getHeight());        mImageView.setScaleType(ScaleType.FIT_END);        mImageView.setImageResource(resourceID);    }    /** * 测试FIT_START属性 * * FIT_START和FIT_CENTER属性非常类似 * 差别在于,FIT_END最终会将缩放后的图片放在ImageView控件的左上角 */    private void testFitStart(int resourceID) {        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),resourceID);        System.out.println("---> width=" + bitmap.getWidth()+ " ,height=" + bitmap.getHeight());        mImageView.setScaleType(ScaleType.FIT_START);        mImageView.setImageResource(resourceID);    }    /** * 测试FIT_XY属性 * * 不按照比例缩放图片,从而使图片铺满整个ImageView。 * 在此情况下虽然可以完整地显示图片,但是图片会被拉伸导致失真 * */    private void testFitXY(int resourceID) {        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),resourceID);        System.out.println("---> width=" + bitmap.getWidth()+ " ,height=" + bitmap.getHeight());        mImageView.setScaleType(ScaleType.FIT_XY);        mImageView.setImageResource(resourceID);    }}

更多相关文章

  1. Android(安卓)TextView中显示图片的4种方式
  2. [置顶] Android(安卓)Gallery用法(自定义边框+底部小圆点)
  3. Android特效 - 收藏集 - 掘金
  4. Androidの自定义Spinner实现
  5. Android报表控件achartengine介绍(一)
  6. --android bitmap oom 分析
  7. Android(安卓)Widget工具箱
  8. Android(安卓)UI 之 我的页面 圆形图片+通用item封装(简化代码量)
  9. Android(安卓)DrawableTextView图片文字居中显示

随机推荐

  1. Android几种常见 自定义Button样式
  2. 如何学习Android及如何利用android来赚钱
  3. Solution of issue: Android(安卓)soft k
  4. 同一功能在Android不同版本进行兼容的方
  5. Android热修复之AndFix
  6. 基于Qt for Android联想到调用Android(安
  7. 系统总结归纳一下android
  8. android EditText的自动换行和对Enter键
  9. Android和设计模式:代理模式
  10. Android串口设备的应用实现方案以及与WEB