android背景图片的设置问题

Roly 2012-07-27 10:16:00
通过点击按钮监听更换图片,没点击一次,跟换不同的图片,图片资源位于R.drawable目录下。
我使用的方法是用最外面的布局id直接在主代码中.setBackgroundResource(R.id.a),结果出现内存泄漏,不知道各位有没有更好的方法,求解决?
...全文
2703 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
Roly 2012-08-03
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 的回复:]

由于你的图片过大,而且数量很多,可能在加载图片的时候就已经内存溢出了,
首先你可以使用Android的图片缩放,也就是一开始不会去实实在在的加载图片,具体的参考资料http://wenku.baidu.com/view/ac276b1a964bcf84b9d57b68.html这样的话就算你图片很大的话也不会出现内存溢出的问题
至于你的第二个问题,图片是不是有循序,这是你项目的需……
[/Quote]非常感谢!首先:其实,我并没有一次把图片都加载进来,图片缩放确实是一个不错的方法;
第二:图片当然是有规律的,是有一定的顺序,然而图片本身不可变,但是引用的名字规则还是的自己想。其实,这个还是程序问题。
其实关于这方面的资料,在网上已经查了很多,内存溢出,但是问题各有所不同,而且很零散,再说学习android的经历不多,有些问题可能还看不透,需要大家点化一下。
总之,非常感谢你中肯的建议。
Chiclaim 2012-08-03
  • 打赏
  • 举报
回复
由于你的图片过大,而且数量很多,可能在加载图片的时候就已经内存溢出了,
首先你可以使用Android的图片缩放,也就是一开始不会去实实在在的加载图片,具体的参考资料http://wenku.baidu.com/view/ac276b1a964bcf84b9d57b68.html这样的话就算你图片很大的话也不会出现内存溢出的问题
至于你的第二个问题,图片是不是有循序,这是你项目的需求,只有你自己知道.

建议给到这里,最终还是要靠自己,没有一个问题,别人给你一个demo就解决的,就算需要demo自己到网上找,
我也是这样走过来的.最好到使用google,推荐网站stackoverflow.com
Roly 2012-08-03
  • 打赏
  • 举报
回复
貌似真正解决问题的回答很少啊!可能是大家对我这个问题理解的不够,或者是解释的不够清楚。在这里重新解释一下问题:
问题1、实现图片的显示(这个显示最好可以作为背景图片显示)
2、通过Button控件,没点击一次,替换不同的图片,而这些图片是不是应该有顺序或者规律呢?
3、图片资源比较多,有1500张,直接放在drawable文件夹下固然不行,所以我把图片文件拷贝到了sdcard中。希望各位android的爱好者,先看懂了问题后,再提出合适的解决方案,非常感谢各位的帮助!
Roly 2012-08-03
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 的回复:]

setBackgroundDrawable这个貌似会有一点内存泄漏,因为他申请了native 内存,如果压力测试的话。会出现泄漏的,解决的方法就是按照android home中的一个方法,自己去释放这些内存,也就是recycle它。
[/Quote]貌似只有Bitmap对象才可以回收,要实现多张图片的交替显示似乎bitmap又行不通,问题纠结中
hvk687 2012-08-03
  • 打赏
  • 举报
回复
setBackgroundDrawable这个貌似会有一点内存泄漏,因为他申请了native 内存,如果压力测试的话。会出现泄漏的,解决的方法就是按照android home中的一个方法,自己去释放这些内存,也就是recycle它。
Roly 2012-08-03
  • 打赏
  • 举报
回复
另外还有一个问题想问下,压缩的图片为Bitmap对象,那么如何通过Button控件监听图片的替换呢?这个貌似不好解决吧!还是没有解决!
jnhoodlum 2012-08-03
  • 打赏
  • 举报
回复
http://blog.csdn.net/jnhoodlum/article/details/7817681
Roly 2012-08-03
  • 打赏
  • 举报
回复
谢谢各位,图片是美工给的,他们经过处理给的,处理图片这块不怎么会,希望大家给点demo更好,谢谢了!
Roly 2012-08-03
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

myIcon=getResources().getDrawable(backgroundPicture);
recite1Line.setBackgroundDrawable(myIcon);

改成:

Drawable myIcon1=getResources().getDrawable(backgroundPicture);
recite1Line.setBackgroundD……
[/Quote]这个之前用的就是这种方法,后面2楼说第二个可以,就试了第二个还是不行,这两种都是一样的错误
Roly 2012-08-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

这是图片太大导致内存溢出了吧,你的图片是多大的?
[/Quote]每一张2M,但是要总共要显示的有1500张,通过Button事件监听每次显示一张,第一次处理图片问题,很是棘手,真不知道怎么处理好
ngf318 2012-08-02
  • 打赏
  • 举报
回复
这是图片太大导致内存溢出了吧,你的图片是多大的?
and_asu 2012-08-02
  • 打赏
  • 举报
回复
你的图片太大了 ,所以会内存泄露,应该处理一下图片
CuGBabyBeaR 2012-08-02
  • 打赏
  • 举报
回复
首先
通过设置BitmapFactory.Options 里的opt.inJustDecodeBounds = false;获得原图片大小 计算压缩比opt.inSampleSize
然后再读取图片可以在不降低显示质量的情况下有效减小图片所占内存

第二 每次更换图片回收前一张图片所用内存
ngf318 2012-08-02
  • 打赏
  • 举报
回复
图片太大了,压缩一下再用吧。
AMinfo 2012-08-02
  • 打赏
  • 举报
回复
myIcon=getResources().getDrawable(backgroundPicture);
recite1Line.setBackgroundDrawable(myIcon);

改成:

Drawable myIcon1=getResources().getDrawable(backgroundPicture);
recite1Line.setBackgroundDrawable(myIcon1);

看看
Roly 2012-08-02
  • 打赏
  • 举报
回复
 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);
}
});
红色部分是设置颜色的模块
AMinfo 2012-08-02
  • 打赏
  • 举报
回复
发代码上来看看
Roly 2012-08-02
  • 打赏
  • 举报
回复
没有解决的方法了吗?
Roly 2012-08-01
  • 打赏
  • 举报
回复
难道没有一个人能解决这个问题吗?
Roly 2012-08-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

不是有两个方法吗?
.setBackgroundResource(R.drawable.ic_launcher);
.setBackgroundDrawable(drawable);

第一个会内存泄露吗? 为什么
第二个自己生成drawable,可以自己回收,可以保证不会因为图片的原因导致内存泄露。
[/Quote]用你的第二个试了下,和以前的结果一样:01-30 10:57:52.589: E/AndroidRuntime(761): java.lang.OutOfMemoryError
加载更多回复(6)

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧