本帖最后由 j67065 于 2012-08-01 16:27:49 编辑

解决方案 »

  1.   

    很困惑,学android不久,发现遇到的问题还是不少,希望各位前辈们指点迷津,谢谢!
      

  2.   

    不是有两个方法吗?
    .setBackgroundResource(R.drawable.ic_launcher);
    .setBackgroundDrawable(drawable);第一个会内存泄露吗? 为什么
    第二个自己生成drawable,可以自己回收,可以保证不会因为图片的原因导致内存泄露。
      

  3.   

    第一个:因为我设置的是,每点击一个button,就显示下一张图片。开始两张没问题,后面第三张就内存泄漏了。
    第二个自己生产drawable?这个怎么实现呢?
      

  4.   

    用你的第二个试了下,和以前的结果一样:01-30 10:57:52.589: E/AndroidRuntime(761): java.lang.OutOfMemoryError
      

  5.   

    每一张2M,但是要总共要显示的有1500张,通过Button事件监听每次显示一张,第一次处理图片问题,很是棘手,真不知道怎么处理好
      

  6.   

     button1=(Button)findViewById(R.id.button1);
            button1.setOnClickListener(new android.view.View.OnClickListener()
            {
    @Override
    public void onClick(View arg0) 
    {
    soundPool.play(loadId1, 1, 1, 1, 0, 1f);

    // 顺序显示下一个按钮的设置
    if(b.getString("display").equals("顺序显示"))
    {
                if(first>=start&&count<numbers)
                {
             textView2.setText( englishes.get(first).getWord());
             textView3.setText(englishes.get(first).getDefinition()); 
         textView4.setText(englishes.get(first).getAssociation());     backgroundPicture++;
         myIcon=getResources().getDrawable(backgroundPicture);
         recite1Line.setBackgroundDrawable(myIcon);

             first++;
             count++;
             textView1.setText(count+" \r\n");
             }
       }
       //随机显示下一个按钮设置

          else 
      { 
    if(count<numbers)

    int k=change[count];
    textView2.setText( englishes.get(k).getWord());
        textView3.setText(englishes.get(k).getDefinition()); 
    textView4.setText(englishes.get(k).getAssociation());
    count++;
        textView1.setText(count+"\r\n");
     }
        
     } 
     textView2.setVisibility(View.INVISIBLE);
         textView3.setVisibility(View.INVISIBLE);
    }  
       });红色部分是设置颜色的模块
      

  7.   

    myIcon=getResources().getDrawable(backgroundPicture);
    recite1Line.setBackgroundDrawable(myIcon);改成:Drawable myIcon1=getResources().getDrawable(backgroundPicture);
    recite1Line.setBackgroundDrawable(myIcon1);看看
      

  8.   

    首先 
    通过设置BitmapFactory.Options 里的opt.inJustDecodeBounds = false;获得原图片大小 计算压缩比opt.inSampleSize
    然后再读取图片可以在不降低显示质量的情况下有效减小图片所占内存第二 每次更换图片回收前一张图片所用内存
      

  9.   

    谢谢各位,图片是美工给的,他们经过处理给的,处理图片这块不怎么会,希望大家给点demo更好,谢谢了!
      

  10.   

    http://blog.csdn.net/jnhoodlum/article/details/7817681
      

  11.   

    另外还有一个问题想问下,压缩的图片为Bitmap对象,那么如何通过Button控件监听图片的替换呢?这个貌似不好解决吧!还是没有解决!
      

  12.   

    setBackgroundDrawable这个貌似会有一点内存泄漏,因为他申请了native 内存,如果压力测试的话。会出现泄漏的,解决的方法就是按照android home中的一个方法,自己去释放这些内存,也就是recycle它。
      

  13.   

    貌似只有Bitmap对象才可以回收,要实现多张图片的交替显示似乎bitmap又行不通,问题纠结中
      

  14.   

    貌似真正解决问题的回答很少啊!可能是大家对我这个问题理解的不够,或者是解释的不够清楚。在这里重新解释一下问题:
    问题1、实现图片的显示(这个显示最好可以作为背景图片显示)
        2、通过Button控件,没点击一次,替换不同的图片,而这些图片是不是应该有顺序或者规律呢?
        3、图片资源比较多,有1500张,直接放在drawable文件夹下固然不行,所以我把图片文件拷贝到了sdcard中。希望各位android的爱好者,先看懂了问题后,再提出合适的解决方案,非常感谢各位的帮助!
      

  15.   

    由于你的图片过大,而且数量很多,可能在加载图片的时候就已经内存溢出了,
       首先你可以使用Android的图片缩放,也就是一开始不会去实实在在的加载图片,具体的参考资料http://wenku.baidu.com/view/ac276b1a964bcf84b9d57b68.html这样的话就算你图片很大的话也不会出现内存溢出的问题
       至于你的第二个问题,图片是不是有循序,这是你项目的需求,只有你自己知道.建议给到这里,最终还是要靠自己,没有一个问题,别人给你一个demo就解决的,就算需要demo自己到网上找,
    我也是这样走过来的.最好到使用google,推荐网站stackoverflow.com
      

  16.   

    非常感谢!首先:其实,我并没有一次把图片都加载进来,图片缩放确实是一个不错的方法;
              第二:图片当然是有规律的,是有一定的顺序,然而图片本身不可变,但是引用的名字规则还是的自己想。其实,这个还是程序问题。
              其实关于这方面的资料,在网上已经查了很多,内存溢出,但是问题各有所不同,而且很零散,再说学习android的经历不多,有些问题可能还看不透,需要大家点化一下。
              总之,非常感谢你中肯的建议。