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

 更新时间:2016年09月05日 10:36:22   作者:wuyudong  
这篇文章主要介绍了android中图片加载到内存的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

本文演示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" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="load"
android:text="加载图片到内存" />
<ImageView
android:id="@+id/iv"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>

往mnt/sdcard中上传测试图片

添加逻辑部分代码:

public class MainActivity extends Activity {
private ImageView iv;
@Override
protected 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中图片加载到内存的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Android Application级别自定义Toast

    Android Application级别自定义Toast

    这篇文章主要为大家详细介绍了Android Application级别自定义Toast,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Android App如何防止抓包

    Android App如何防止抓包

    我们要知道常用的抓包方式有Charles和Fiddler,他们通过在手机网络中添加代理的方式,拿到App的请求,这篇文章主要给大家介绍了关于Android中App如何防止抓包的相关资料,需要的朋友可以参考下
    2022-03-03
  • AndroidStudio重新share代码和上传到svn新地址教程

    AndroidStudio重新share代码和上传到svn新地址教程

    这篇文章主要介绍了AndroidStudio重新share代码和上传到svn新地址教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • android用java和c实现查找sd卡挂载路径(sd卡路径)的方法

    android用java和c实现查找sd卡挂载路径(sd卡路径)的方法

    这篇文章主要介绍了android用java和c实现查找sd卡挂载路径(sd卡路径)的方法,需要的朋友可以参考下
    2014-02-02
  • 详解 WebView 与 JS 交互传值问题

    详解 WebView 与 JS 交互传值问题

    这篇文章主要介绍了详解 WebView 与 JS 交互传值问题的相关资料,需要的朋友可以参考下
    2017-06-06
  • kotlin 官方学习教程之基础语法详解

    kotlin 官方学习教程之基础语法详解

    这篇文章主要介绍了kotlin 官方学习教程之基础语法详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • android 手机SD卡读写操作(以txt文本为例)实现步骤

    android 手机SD卡读写操作(以txt文本为例)实现步骤

    要完成SD卡读写操作首先对manifest注册SD卡读写权限其次是创建一个对SD卡中文件读写的类写一个用于检测读写功能的的布局然后就是UI的类了,感兴趣的朋友可以参考下,希望可以帮助到你
    2013-02-02
  • Android Fragment源码分析Add方法

    Android Fragment源码分析Add方法

    Fragment是Android3.0后引入的一个新的API,他出现的初衷是为了适应大屏幕的平板电脑, 当然现在他仍然是平板APP UI设计的宠儿,而且我们普通手机开发也会加入这个Fragment, 我们可以把他看成一个小型的Activity,又称Activity片段
    2022-08-08
  • Android scheme 跳转的设计与实现详解

    Android scheme 跳转的设计与实现详解

    这篇文章主要介绍了Android scheme 跳转的设计与实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Android AOP框架AspectJ使用详解

    Android AOP框架AspectJ使用详解

    本篇文章主要介绍了Android AOP框架AspectJ使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11

最新评论