android中图片加载到内存的实例代码

时间:2021-05-20

本文演示android中图片加载到内存

首先设计界面:

代码如下:

<LinearLayout 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:orientation="vertical"tools:context=".MainActivity" ><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="load"android:text="加载图片到内存" /><ImageViewandroid:id="@+id/iv"android:layout_width="fill_parent"android:layout_height="fill_parent" /></LinearLayout>

往mnt/sdcard中上传测试图片

添加逻辑部分代码:

public class MainActivity extends Activity {private ImageView iv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);iv = (ImageView) findViewById(R.id.iv);}public void load() {Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/a.jpg");iv.setImageBitmap(bitmap);}}

运行代码,产生错误,原因是图片太大(选取的是大照片)

可以使用BitmapFactory中包含的静态类Options在不解析图片信息的前提下得到图片的宽高信息:

BitmapFactory.Options opts = new Options();// 不去解析图片信息,只是得到图片的头部信息 宽高opts.inJustDecodeBounds = true;BitmapFactory.decodeFile("/sdcard/a.jpg", opts);int imageHeight = opts.outHeight;int imagewidth = opts.outWidth;System.out.println("图片宽:" + imagewidth);System.out.println("图片高" + imageHeight);

运行一下:

09-04 06:09:10.519: I/System.out(1812): 图片宽:2560
09-04 06:09:10.519: I/System.out(1812): 图片高1920

接下来得到手机屏幕的宽高:

//得到手机屏幕的宽高WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE);int height = wm.getDefaultDisplay().getHeight();int width = wm.getDefaultDisplay().getWidth();

可以看到getHeight与getWidth方法均已过时,使用下面的方法替代:

// 得到手机屏幕的宽高WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);Point outSize = new Point();wm.getDefaultDisplay().getSize(outSize); // 3.0以后的版本才能使用

完整代码如下:

package com.wuyudong.loadimage;import android.os.Bundle;import android.annotation.SuppressLint;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.BitmapFactory.Options;import android.graphics.Point;import android.view.Menu;import android.view.View;import android.view.WindowManager;import android.widget.ImageView;public class MainActivity extends Activity {private ImageView iv;private int windowHeight;private int windowWidth;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);windowHeight = wm.getDefaultDisplay().getHeight();windowWidth = wm.getDefaultDisplay().getWidth();//Point outSize = new Point();//wm.getDefaultDisplay().getSize(outSize); // 3.0以后的版本才能使用//windowHeight = outSize.y;//windowWidth = outSize.x;}public void load(View view) {// Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/a.jpg");// iv.setImageBitmap(bitmap);// 图片解析的配置BitmapFactory.Options opts = new Options();// 不去解析图片信息,只是得到图片的头部信息 宽高opts.inJustDecodeBounds = true;BitmapFactory.decodeFile("/sdcard/a.jpg", opts);int imageHeight = opts.outHeight;int imagewidth = opts.outWidth;System.out.println("图片宽:" + imagewidth);System.out.println("图片高" + imageHeight);// 计算缩放比例int scaleX = imagewidth / windowWidth;int scaleY = imageHeight / windowHeight;int scale = 1;if (scaleX > scaleY & scaleY >= 1) {scale = scaleX;}if (scaleY > scaleX & scaleX >= 1) {scale = scaleY;}//解析图片opts.inJustDecodeBounds = false;//采样率opts.inSampleSize = scale;Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/a.jpg", opts);iv.setImageBitmap(bitmap);}}

以上所述是小编给大家介绍的android中图片加载到内存的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章