android中本地图片太大,显示不了,怎么办?求大神

我把其他小一点的图片放进去就行,换大一点的就显示不了,代码如下

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"

<ImageView
    android:id="@+id/launch_page"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:src="@drawable/main_menu_bg"
    />

测量ImageView宽高、图片宽高,对图片进行适当缩放。
如果是简单的加载本地图片,直接自己实现简单的缩放就好了。
如果是动态的加载来自网络的图片,建议使用第三方开源库Fresco、Picaso等(推荐Fresco)。

在HTML里只要涉及文件的地方(如超级链接、图片等)就会涉及绝对路径与相对路径的概念。

 1.绝对路径
    绝对路径是指文件在硬盘上真正存在的路径。例如“bg.jpg”这个图片是存放在硬盘的“E:\book\网页布局代码\第2章”目录下,那么 “bg.jpg”这个图片的绝对路径就是“E:\book\网页布\代码\第2章\bg.jpg"。那么如果要使用绝对路径指定网页的背景图片就应该使用 以下语句:
<body backround="E:\book\网页布局\代码\第2章\bg.jpg" > 

  2.使用绝对路径的缺点
   事实上,在网页编程时,很少会使用绝对路径,如果使用“E:\book\网页布\代码\第2章\bg.jpg”来指定背景图片的位置,在自己的计算机上 浏览可能会一切正常,但是上传到Web服务器上浏览就很有可能不会显示图片了。因为上传到Web服务器上时,可能整个网站并没有放在Web服务器的E盘, 有可能是D盘或H盘。即使放在Web服务器的E盘里,Web服务器的E盘里也不一定会存在“E:\book\网页布局\代码\第2章”这个目录,因此在浏 览网页时是不会显示图片的。

  3.相对路径
    为了避免这种隋况发生,通常在网页里指定文件时,都会选择使用相对路径。所谓相对路径,就是相对于自己的目标文件位置。例如上面的例子,“s1.htm” 文件里引用了“bg.jpg”图片,由于“bg.jpg”图片相对于“s1.htm”来说,是在同一个目录的,那么要在“s1.htm”文件里使用以下代 码后,只要这两个文件的相对位置没有变(也就是说还是在同一个目录内),那么无论上传到Web服务器的哪个位置,在浏览器里都能正确地显示图片。
      <body background="bg.jpg">
再 举一个例子,假设“s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网页 布局\代码\第2章\img”,那么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的“img”子目录里,则引用图片的语句应该 为:
      <body background="img/bg.jpg">  

    注意:相对路径使用“/”字符作为目录的分隔字符,而绝对路径可以使用“\”或“/”字符作为目录的分隔字符。由于“img”目录是“第2章”目录下的子目录,因此在“img”前不用再加上“/”字符。
在 相对路径里常使用“../”来表示上一级目录。如果有多个上一级目录,可以使用多个“../”,例如“http://www.cnblogs.com/”代表上上级目录。假设 “s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网页布局\代码”,那 么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的上级目录里,则引用图片的语句应该为:
      <body background="../bg.jpg">  

  再举一个例子,假设“s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网 页布局\代码\img”,那么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的上级目录里的“img”子目录里,则引用图片的语句 应该为:
      <body background="../img/bg.jpg">  

4.相对虚拟目录
有关相对路径还有一个比较特殊的表示:“相对虚拟目录”。请看下面的例子:
      <body background="/img/bg.jpg">  

  在这个例子里,background属性的值为“/img/bg.jpg”,注意在“img”前有一个“/”字符。这个“/”代表的是虚拟目录的根目录. 假设把“E:\book\网页布局\代码”设为虚拟目录,那么“/img/bg.jpg”的真实路径为“E:\book\网页布局\代码\img \bg.jpg”;如果把“E:\book\网页布局\代码\第2章”设为虚拟目录,那么“/img/bg.jpg”的真实路径为“E:\book\网页 布局\代码\第2章\img\bg.jpg” 
这是毕设中,我要读取本地相机拍摄到的相片时,遇到的问题,提示OOM,然后强制关闭,这篇博客点击打开链接里提到了一种方法能解决这个问题。我把主要内容写下:

[java] view plain copy 在CODE上查看代码片派生到我的代码片
public final class BitMapUtil {  

      private static final Size ZERO_SIZE = new Size(0, 0);  
      private static final Options OPTIONS_GET_SIZE = new Options();  
      private static final Options OPTIONS_DECODE = new Options();  
      private static final byte[] LOCKED = new byte[0];  

// 此对象用来保持Bitmap的回收顺序,保证最后使用的图片被回收  
      private static final LinkedList CACHE_ENTRIES = new LinkedList();   

// 线程请求创建图片的队列  
     private static final Queue TASK_QUEUE = new LinkedList();   

// 保存队列中正在处理的图片的key,有效防止重复添加到请求创建队列   

     private static final Set TASK_QUEUE_INDEX = new HashSet();    

// 缓存Bitmap  
     private static final Map IMG_CACHE_INDEX = new HashMap();                         // 通过图片路径,图片大小  

     private static int CACHE_SIZE = 20; // 缓存图片数量  

   static {  
     OPTIONS_GET_SIZE.inJustDecodeBounds = true;  
  // 初始化创建图片线程,并等待处理  
  new Thread() {  
   {  
    setDaemon(true);  
   }  

   public void run() {  
    while (true) {  
     synchronized (TASK_QUEUE) {  
      if (TASK_QUEUE.isEmpty()) {  
       try {  
        TASK_QUEUE.wait();  
       } catch (InterruptedException e) {  
        e.printStackTrace();  
       }  
      }  
     }  
     QueueEntry entry = TASK_QUEUE.poll();  
     String key = createKey(entry.path, entry.width,  
       entry.height);  
     TASK_QUEUE_INDEX.remove(key);  
     createBitmap(entry.path, entry.width, entry.height);  
    }  
   }  
  }.start();  

 }  




 public static Bitmap getBitmap(String path, int width, int height) {  
        if(path==null){  
            return null;  
        }  
  Bitmap bitMap = null;  
  try {  
   if (CACHE_ENTRIES.size() >= CACHE_SIZE) {  
    destoryLast();  
   }  
   bitMap = useBitmap(path, width, height);  
   if (bitMap != null && !bitMap.isRecycled()) {  
    return bitMap;  
   }  
   bitMap = createBitmap(path, width, height);  
   String key = createKey(path, width, height);  
   synchronized (LOCKED) {  
    IMG_CACHE_INDEX.put(key, bitMap);  
    CACHE_ENTRIES.addFirst(key);  
   }  
  } catch (OutOfMemoryError err) {  
   destoryLast();  
   System.out.println(CACHE_SIZE);  
   return createBitmap(path, width, height);  
  }  
  return bitMap;  
 }  




 public static Size getBitMapSize(String path) {  
  File file = new File(path);  
  if (file.exists()) {  
   InputStream in = null;  
   try {  
    in = new FileInputStream(file);  
    BitmapFactory.decodeStream(in, null, OPTIONS_GET_SIZE);  
    return new Size(OPTIONS_GET_SIZE.outWidth,  
      OPTIONS_GET_SIZE.outHeight);  
   } catch (FileNotFoundException e) {  
    return ZERO_SIZE;  
   } finally {  
    closeInputStream(in);  
   }  
  }  
  return ZERO_SIZE;  
 }  



 // ------------------------------------------------------------------ private Methods  
 // 将图片加入队列头  
 private static Bitmap useBitmap(String path, int width, int height) {  
  Bitmap bitMap = null;  
  String key = createKey(path, width, height);  
  synchronized (LOCKED) {  
   bitMap = IMG_CACHE_INDEX.get(key);  
   if (null != bitMap) {  
    if (CACHE_ENTRIES.remove(key)) {  
     CACHE_ENTRIES.addFirst(key);  
    }  
   }  
  }  
  return bitMap;  
 }  



 // 回收最后一张图片  
 private static void destoryLast() {  
  synchronized (LOCKED) {  
   String key = CACHE_ENTRIES.removeLast();  
   if (key.length() > 0) {  
    Bitmap bitMap = IMG_CACHE_INDEX.remove(key);  
    if (bitMap != null && !bitMap.isRecycled()) {  
     bitMap.recycle();  
     bitMap = null;  
    }  
   }  
  }  
 }  



 // 创建键  
 private static String createKey(String path, int width, int height) {  
  if (null == path || path.length() == 0) {  
   return "";  
  }  
  return path + "_" + width + "_" + height;  
 }  



 // 通过图片路径,宽度高度创建一个Bitmap对象  
 private static Bitmap createBitmap(String path, int width, int height) {  
  File file = new File(path);  
  if (file.exists()) {  
   InputStream in = null;  
   try {  
    in = new FileInputStream(file);  
    Size size = getBitMapSize(path);  
    if (size.equals(ZERO_SIZE)) {  
     return null;  
    }  
    int scale = 1;  
    int a = size.getWidth() / width;  
    int b = size.getHeight() / height;  
    scale = Math.max(a, b);  
    synchronized (OPTIONS_DECODE) {  
     OPTIONS_DECODE.inSampleSize = scale;  
     Bitmap bitMap = BitmapFactory.decodeStream(in, null,  
       OPTIONS_DECODE);  
     return bitMap;  
    }  
   } catch (FileNotFoundException e) {  
                Log.v("BitMapUtil","createBitmap=="+e.toString());  
   } finally {  
    closeInputStream(in);  
   }  
  }  
  return null;  
 }  

 // 关闭输入流  
 private static void closeInputStream(InputStream in) {  
  if (null != in) {  
   try {  
    in.close();  
   } catch (IOException e) {  
    Log.v("BitMapUtil","closeInputStream=="+e.toString());  
   }  
  }  
 }  



 // 图片大小  
 static class Size {  
  private int width, height;  

  Size(int width, int height) {  
   this.width = width;  
   this.height = height;  
  }  

  public int getWidth() {  
   return width;  
  }  

  public int getHeight() {  
   return height;  
  }  
 }  



 // 队列缓存参数对象  
 static class QueueEntry {  
  public String path;  
  public int width;  
  public int height;  
 }  
}  

使用时直接调用其中的getBitmap()即可。 

在HTML里只要涉及文件的地方(如超级链接、图片等)就会涉及绝对路径与相对路径的概念。

1.绝对路径
绝对路径是指文件在硬盘上真正存在的路径。例如“bg.jpg”这个图片是存放在硬盘的“E:\book\网页布局代码\第2章”目录下,那么 “bg.jpg”这个图片的绝对路径就是“E:\book\网页布\代码\第2章\bg.jpg"。那么如果要使用绝对路径指定网页的背景图片就应该使用 以下语句:

2.使用绝对路径的缺点
事实上,在网页编程时,很少会使用绝对路径,如果使用“E:\book\网页布\代码\第2章\bg.jpg”来指定背景图片的位置,在自己的计算机上 浏览可能会一切正常,但是上传到Web服务器上浏览就很有可能不会显示图片了。因为上传到Web服务器上时,可能整个网站并没有放在Web服务器的E盘, 有可能是D盘或H盘。即使放在Web服务器的E盘里,Web服务器的E盘里也不一定会存在“E:\book\网页布局\代码\第2章”这个目录,因此在浏 览网页时是不会显示图片的。

3.相对路径
为了避免这种隋况发生,通常在网页里指定文件时,都会选择使用相对路径。所谓相对路径,就是相对于自己的目标文件位置。例如上面的例子,“s1.htm” 文件里引用了“bg.jpg”图片,由于“bg.jpg”图片相对于“s1.htm”来说,是在同一个目录的,那么要在“s1.htm”文件里使用以下代 码后,只要这两个文件的相对位置没有变(也就是说还是在同一个目录内),那么无论上传到Web服务器的哪个位置,在浏览器里都能正确地显示图片。


再 举一个例子,假设“s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网页 布局\代码\第2章\img”,那么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的“img”子目录里,则引用图片的语句应该 为:
注意:相对路径使用“/”字符作为目录的分隔字符,而绝对路径可以使用“\”或“/”字符作为目录的分隔字符。由于“img”目录是“第2章”目录下的子目录,因此在“img”前不用再加上“/”字符。

在 相对路径里常使用“../”来表示上一级目录。如果有多个上一级目录,可以使用多个“../”,例如“http://www.cnblogs.com/”代表上上级目录。假设 “s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网页布局\代码”,那 么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的上级目录里,则引用图片的语句应该为:

再举一个例子,假设“s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网 页布局\代码\img”,那么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的上级目录里的“img”子目录里,则引用图片的语句 应该为:

4.相对虚拟目录
有关相对路径还有一个比较特殊的表示:“相对虚拟目录”。请看下面的例子:

在这个例子里,background属性的值为“/img/bg.jpg”,注意在“img”前有一个“/”字符。这个“/”代表的是虚拟目录的根目录. 假设把“E:\book\网页布局\代码”设为虚拟目录,那么“/img/bg.jpg”的真实路径为“E:\book\网页布局\代码\img \bg.jpg”;如果把“E:\book\网页布局\代码\第2章”设为虚拟目录,那么“/img/bg.jpg”的真实路径为“E:\book\网页 布局\代码\第2章\img\bg.jpg”

建议你把图片压缩一下,在显示。我的博客里有个类似的一篇文章,实现简单的用android来压缩图片后显示。希望能帮到你

压缩一下呗,或者使用矩阵,将其变形

在代码里面先加载出图片,等比缩小,,动态添加进去呗