android ImageVIew 设置图片过大会出现将无法显示问题,我是通过压缩图片来解决的;
1:压缩指定的倍数
package com.example.android_ditamp; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //图片存在了 Assets 文件夹的images文件夹中 AssetManager manager = getAssets(); InputStream in = null; try { in = manager.open("images/"+"biglog.png"); } catch (IOException e) { e.printStackTrace(); } // 处理res文件中的资源图片 //InputStream in = getResources().openRawResource(R.drawable.ic_launcher); //BitmapFactory.Options 根据此类我们可以对图片进行压缩 BitmapFactory.Options options = new BitmapFactory.Options(); //这个方法API中介绍 options.inJustDecodeBounds =true ; 得到的Bitmap 为空!不占内存!(虽然得到的位图为空,但我们可以根据 options得到图片的基本信息,例如宽和高)反之的到得Bitmap不为空; options.inJustDecodeBounds =false ; //这个参数就是压缩比例 值为10,长宽高会变为原来的1/10,图片大小变为原来的1/10*10;值小于等于1时,图片也不会放大,不会改变 options.inSampleSize = 10 ; Bitmap mp =BitmapFactory.decodeStream(in,null,options); ((ImageView)(findViewById(R.id.IMG))).setImageBitmap(mp); } }
2:压缩到指定的高度或者宽度
package com.example.android_ditamp; import java.io.IOException; import java.io.InputStream; import android.app.Activity; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.widget.ImageView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //图片存在了 Assets 文件夹的images文件夹中 AssetManager manager = getAssets(); InputStream in = null; try { in = manager.open("images/"+"biglog.png"); } catch (IOException e) { e.printStackTrace(); } BitmapFactory.Options options = new BitmapFactory.Options(); //参考对象 BitmapFactory.Options option = new BitmapFactory.Options(); option.inJustDecodeBounds = true; options.inJustDecodeBounds =false ; // 得到mapnull为空 @SuppressWarnings("unused") Bitmap mpnull =BitmapFactory.decodeStream(in,null,option); //先根据option得到原图片Height,tWidth 这不是用mpnull得到长宽注意下 //我们要把Height压缩到200(不能大于原图片大小,否者不会改变); float Height = option.outHeight; //压缩高度为200,宽度会按比例缩减;(这最后得到的高度可能会和200有一点差别大概在5-10个像素左右) options.inSampleSize = (int) Height/200 ; Bitmap mp =BitmapFactory.decodeStream(in,null,options); ((ImageView)(findViewById(R.id.IMG))).setImageBitmap(mp); } }
小知识,汇聚大智慧!