html2image内存溢出,gallery加载大量图片时内存溢出的解决办法(二)

本文介绍了解决Android Gallery应用在加载大量图片时内存溢出问题的两种方法,包括使用Paint对象和线程处理、以及优化滑动事件和图片加载策略。重点在于如何通过线程并发和缓存技术降低内存消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gallery加载大量图片时内存溢出的解决方法(二)

Paint deafalutPaint =newPaint();

canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);

canvas.drawBitmap(reflectionImage, 0, height + reflectionGap,null);

Paint paint =newPaint();

LinearGradient shader =newLinearGradient(0, bitmap.getHeight(), 0,

bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff,

0x00ffffff, TileMode.CLAMP);

paint.setShader(shader);

paint.setXfermode(newPorterDuffXfermode(Mode.DST_IN));

canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()

+ reflectionGap, paint);

returnbitmapWithReflection;

}

}

2、加载图片的线程

classMyThreadextendsThread{

intindex;

publicMyThread(intindex) {

super();

this.index= index;

}

@Override

publicvoidrun() {

if(imageList.get(index).getIsNull().equals(ISTRUE)) {imageList.get(index).setImage(ImageManager.getRefImage(imageList.get(index)

.getPath()));

imageList.get(index).setIsNull(ISFALSE);

}

refreshAdapter();

}

}

3、gallery的滑动事件

privateGallery.OnItemSelectedListeneritemSelected_listener=newGallery.OnItemSelectedListener() {

@Override

publicvoidonItemSelected(AdapterView> arg0, View arg1,intposition,

longarg3) {

toShowIndex= position;

finalHandler handler =newHandler() {

@Override

publicvoidhandleMessage(Message msg) {

if(showingIndex!=toShowIndex) {

showingIndex=toShowIndex;

//业务逻辑处理

if(toShowIndex

addImage(toShowIndex);

}

}

}

};

Thread checkChange =newThread() {

@Override

publicvoidrun() {

intmyIndex =toShowIndex;

try{

sleep(TIME_OUT_DISPLAY);

if(myIndex ==toShowIndex) {

handler.sendEmptyMessage(0);

}

}catch(InterruptedException e) {

e.printStackTrace();

}

}

};

checkChange.start();

TextView gallery_total =(TextView) findViewById(R.id.gallery_total);

gallery_total.setText((toShowIndex+ 1) +"/"+imageList.size());}

@Override

publicvoidonNothingSelected(AdapterView> arg0) {

}

};

4、更新ImageAdapter

privatevoidrefreshAdapter() {

this.runOnUiThread(newRunnable() {

@Override

publicvoidrun() {

adpter.notifyDataSetChanged();

}

});

}

5、从sd卡里获取图片后封装对象

publicList getAllImageMessage() {

List imageList =newArrayList();

getSD(Environment.getExternalStorageDirectory().toString()+"/");

for(inti = 0; i

ImageMessage im =newImageMessage();

im.setPath(pathList.get(i)[0]);

im.setName(pathList.get(i)[1]);

im.setIsNull(ISTRUE);

imageList.add(im);

}

returnimageList;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值