Android ImageView 的scaleType属性详解(一)
来源:互联网 发布:素材下载站源码 编辑:程序博客网 时间:2024/06/08 17:39
首先扯点别的:
昨天晚上怕97拳皇交流群里喊我打拳皇,都没敢上QQ,怕被虐,也是艰难啊。行,今天少扯点,直接进入正题:Android ImageView 的scaleType属性详解
- 1 首先看看Android中的ImageView在xml文件中的用法
<!--今天讨论的就是android:scaleType="fitCenter"--> <ImageView android:id="@+id/imageView" android:layout_width="150dp" android:layout_height="150dp" android:layout_marginTop="30dp" android:scaleType="fitCenter" android:background="#ff3344"/>
2 scaleTyple 的取值有8种:看看Api
本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦:3 那就从头往下捋一捋(这篇文章先捋前四个,后四个在下一篇文章中再讨论)
3.1 第一个取值是CENTER(中间的意思)意思是把图片放在ImageView 的中间,不进行缩放。如果图片的宽高都小于ImageView的宽高,就直接把图片放入ImageView的中间,如果图片的宽高大于ImageView的宽高则截取图片的中间部分放进ImageView中,光说没意思看效果:
小图片效果
大图片效果,先看看原图娱乐一下
然后把她放进ImageView,效果如下
3.2 第二个取值是CENTER_CROP(中间剪裁)意思是:保持纵横比对图片进行缩放,因此图片会和ImageView同等大小,或者大于ImageView的尺寸。
因为缩放是根据图片的短边与ImageView对应的边长度保持一致(可能是放大或缩小,会导致图片的长等于或者大于ImageView的长边导致整个图片显示不下)。最终结果是完全填充满ImageView.还是看效果
小图片的效果
大图片的效果
3.3第三个取值是CENTER_INSIDE (中间 里面,(废话,会英语的谁不认识这两个单词))解释是:保持纵横比对图片进行缩放,因此图片会和ImageView同等大小,或者**小于**ImageView的尺寸。直到整幅图能够居中显示在ImageView中;小于ImageView的图片不变,直接居中显示,不放大。看效果图
小图片不放大
大图片
3.4第四个取值是FIT_CENTER (适合,中间,是ImageView的默认的缩放模式)解释是:计算一个能保持图片原来面貌的的缩放比例,同时确保图片完全充满整个ImageView,如果不能保证图片整个充满ImageView的话,至少保证图片的一条边完全充满ImageView的对应的边。图片位于ImageView的中间。还是看效果,说不明白,我都蒙圈了。
小图怡情
大图就不咋的了
- 这就是前四种效果了,接下来贴一下代码吧。注意加载图片的时候不要出OOM问题
xml文件<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical"> <ImageView android:id="@+id/imageView" android:layout_width="150dp" android:layout_height="150dp" android:layout_marginTop="30dp" android:scaleType="fitCenter" android:src="@mipmap/ic_launcher" android:background="#ff3344"/> <Button android:id="@+id/btnPickImg" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="从相册选择图片" /></LinearLayout>
java 代码
package com.imageviewdemo;import android.content.Intent;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.provider.MediaStore;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btnPickImg; private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnPickImg= (Button) findViewById(R.id.btnPickImg); btnPickImg.setOnClickListener(this); imageView= (ImageView) findViewById(R.id.imageView); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btnPickImg: //打开手机图库选择一张照片 Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, 7); break; default: break; } } /** * 选择照片后返回,将图片加载到imageView中 * @param requestCode * @param resultCode * @param data */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode==7&&resultCode==RESULT_OK) { Uri uri = data.getData(); String[] filePathColumn = {MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query(uri, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); Log.e("TAG", "picturePath:" + picturePath); cursor.close(); imageView.setImageBitmap(decodeSampledBitmapFromFile(picturePath, imageView.getWidth(), imageView.getHeight())); //imageView.setImageBitmap(decodeSampledBitmapFromFile(picturePath, 400, 400)); } } /**使用这个方法,首先你要将BitmapFactory.Options的inJustDecodeBounds属性设置为true,解析一次图片。 * 然后将BitmapFactory.Options连同期望的宽度和高度一起传递到到calculateInSampleSize方法中, * 就可以得到合适的inSampleSize值了。之后再解析一次图片,使用新获取到的inSampleSize值, * 并把inJustDecodeBounds设置为false,就可以得到压缩后的图片了。 * @param path * @param reqWidth * @param reqHeight * @return */ public Bitmap decodeSampledBitmapFromFile(String path, int reqWidth, int reqHeight) { // 第一次解析将inJustDecodeBounds设置为true,来获取图片大小 final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(path, options); // 调用上面定义的方法计算inSampleSize值 options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); // 使用获取到的inSampleSize值再次解析图片 options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(path, options); } /**计算压缩比 * @param options * @param reqWidth * @param reqHeight * @return */ public int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { // 源图片的高度和宽度 final int height = options.outHeight; final int width = options.outWidth; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { // 计算出实际宽高和目标宽高的比率 final int heightRatio = Math.round((float) height / (float) reqHeight); final int widthRatio = Math.round((float) width / (float) reqWidth); // 选择宽和高中最小的比率作为inSampleSize的值,这样可以保证最终图片的宽和高 // 一定都会大于等于目标的宽和高。 inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; } return inSampleSize; }}
基本就是这样了,另外4中缩放类型和效果图下篇再说。
- Android ImageView 的scaleType属性详解(一)
- Android中的ImageView的scaleType属性详解
- ImageView的android:scaleType属性详解!
- Android的ImageView控件ScaleType属性详解
- Android中ImageView的scaleType属性详解
- Android中ImageView的scaleType属性详解
- Android ImageView 的 scaleType属性详解(二)
- ImageView android:scaleType属性详解
- ImageView 属性:android:scaleType 详解
- ImageView的scaleType属性(一)
- ImageView的ScaleType属性详解
- ImageView的ScaleType属性详解
- ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType)
- ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType)
- ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType)
- ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType)
- ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType)
- ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType)
- Python 基础关键字及符号
- 前端 网页设计之颜色对照表
- 使用SimpleDateFormat格式化日期
- Codeforces 629C Famil Door and Brackets
- java23种设计模式
- Android ImageView 的scaleType属性详解(一)
- 解决jarsperreport打印PDF中文无法显示的问题
- Python-SQLite Api
- PHP限制频繁请求
- conf下setting.xml的核心配置
- Android消息机制之三---Message
- SVN CleanUp失败陷入死循环的解决办法
- spring事务
- DW常用快捷键汇总