Android直接加载大图片会爆OOM,所以需要得到图片的宽和高,以及屏幕的宽和高,然后得到缩放比,就可以加载图片了。
public class MainActivity extends ActionBarActivity {
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv=(ImageView) findViewById(R.id.iv);
WindowManager wm=(WindowManager) getSystemService(WINDOW_SERVICE);
int height=wm.getDefaultDisplay().getHeight();
int width=wm.getDefaultDisplay().getWidth();
System.out.println("width:"+width+"---"+height);
BitmapFactory.Options options = new Options();
//设置为true,只会得到图片基本信息,不会加载图片
options.inJustDecodeBounds=true;
BitmapFactory.decodeFile("/mnt/sdcard/eeee.jpg",options);
int imgWidth=options.outWidth;
int imgHeight=options.outHeight;
System.out.println("图片的宽和高:"+imgHeight+"-----"+imgHeight);
//设置缩放比
int scale=1;
int scaleX=imgWidth/width;
int scaleY=imgHeight/height;
if(scaleX>scaleY){
scale=scaleX;
}else{
scale=scaleY;
}
System.out.println("thi probdfd:"+scale);
options.inSampleSize=scale;
//设置为false,可以加载图片
options.inJustDecodeBounds=false;
Bitmap bitmap = BitmapFactory.decodeFile("/mnt/sdcard/eeee.jpg",options);
iv.setImageBitmap(bitmap);
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.picdemo1.MainActivity" >
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>