iv.setMaxHeight(dm.heightPixels/2);
iv.setMaxWidth(dm.widthPixels/2);
我用上面的代码把imageview的大小都限制到了屏幕的一半,大部分图片都能自动缩放。
但是只要是长图,如果运行的模拟设备屏幕太小都会强退,如果设备屏幕够大的就会自动缩小。
比如,一张长图,在平板电脑的设备里可以显示,但是放到手机屏幕上就会强退,为什么会这样啊?该怎么解决呢?

解决方案 »

  1. 和ImageView的大小有关系?貌似只和图片的大小有关吧?解图片的时候设置一下inSampleSize试试
      

  2. OOM 百度一下 你就有答案了
      

  3. 确实是和图片大小有关,可是没法解决,所以才来问原因的。
    我用的不是bitmap,我是直接用imageview.setresource来加载图片。
      

  4. setResource只不过是系统帮你解成bitmap而已
      

  5.  BitmapFactory.Options bitOptions=new Options();
            //设置读进来的比例,以原来的1/10来读取
          bitOptions.inSampleSize=10;
     Bitmap bitmap= BitmapFactory.decodeFile("/sdcard/a.jpg",bitOptions);
    iView.setImageBitmap(bitmap)
    能够实现大小变为原来的十分之一
      


  6. Bitmap bt;
    int intnt = 2;
    while ( true ) {
    Options op = new Options();
            op.inJustDecodeBounds = true;
            bt = BitmapFactory.decodeFile(mImagePath, op);
            op.inSampleSize = intnt; 
            op.inJustDecodeBounds = false; 
            bt = BitmapFactory.decodeFile(mImagePath, op);
            
            if ( bt != null ){
             intnt = intnt+1;
             if ( bt.getWidth() < 240 || bt.getHeight() < 240 ) {          break;
            }
            }
            
    }
    bt就是等比缩放后的bitmap
      

  7. bitOptions.inSampleSize=10;  不是表示 原来的1/10 
      


  8. 这个确实能缩小图片,也能让超出屏幕长度的图片能正常打开,可以有一两张图片并没有缩小,这个我就不明白了。
    因为我的图片是用id打开的,所以我没有用decodeFile,我用decodeResource同样达到了用bitmap解码的效果。
      

  9. 先计算长度再decode出来就可以了
      

类似问题 »