gpt4 book ai didi

android - 如何动态卸载图库中的图像?

转载 作者:太空狗 更新时间:2023-10-29 13:38:31 25 4
gpt4 key购买 nike

我有自定义 ImageView:

public class ShadowedImageView extends ImageView {

private Paint mPaint;
public Bitmap bitmap = null;
private Bitmap tempBitmap;
private Bitmap thumb;
private Bitmap image;
public float shadowRadius = 2f;
public float shadowDx = 1f;
public float shadowDy = 1f;
public int shadowColor = Color.BLACK;
public int scale = 1;
public int requiredWidth = 768;
public int requiredHeight = 1024;
public int loaded = 0;

public ShadowedImageView(Context context) {
super(context);
setShadow();
loaded = 0;
}

public ShadowedImageView(Context context, AttributeSet attrs){
super(context, attrs);
setShadow();
loaded = 0;
}

public void setShadow(){
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setShadowLayer(shadowRadius, shadowDx, shadowDy, shadowColor);
Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.pl);
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pl);
setImageDrawable(drawable);
}

public void refreshShadow(){
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setShadowLayer(shadowRadius, shadowDx, shadowDy, shadowColor);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}

@Override
protected void onMeasure(int w, int h) {
super.onMeasure(w,h);

int mH, mW;
mW = getSuggestedMinimumWidth() < getMeasuredWidth()? getMeasuredWidth() : getSuggestedMinimumWidth();
mH = getSuggestedMinimumHeight() < getMeasuredHeight()? getMeasuredHeight() : getSuggestedMinimumHeight();
setMeasuredDimension(mW + 5, mH + 5);

}

public void downloadThumb(final Publication pub){
OnClickListener theCommonListener = new OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), PublicationReader.class);
intent.putExtra("pubUrl", pub.publicationUrl);
intent.putExtra("pubPages", pub.publicationPages);
intent.putExtra("pubId", pub.id);

v.getContext().startActivity(intent);
}
};
this.setOnClickListener(theCommonListener);
download(pub.thumbImageUrl);
}

public void download(String fileUrl){
downloadTask t = new downloadTask();
t.loadData(fileUrl, this);
t.execute();
}

private class downloadTask extends AsyncTask<String, Void, Long> {
String fileUrl;
ShadowedImageView imView;

public void loadData(String u, ShadowedImageView i) {
fileUrl = u;
imView = i;
}

@Override
protected Long doInBackground(String... params) {
try{
Bitmap bmImg = null;
URL myFileUrl = null;
try {
if(fileUrl!=null){
myFileUrl= new URL(fileUrl);
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
if(myFileUrl!=null){
HttpURLConnection conn=(HttpURLConnection)myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
decodeStream(is);
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(Long result){
setImageBitmap(bitmap);
invalidate();

}
}

private void decodeStream(InputStream is){
try {
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=scale;
bitmap = BitmapFactory.decodeStream(is, null, o2);
refreshShadow();
loaded = 1;
invalidate();
} catch (Exception e) {
e.printStackTrace();
}
}
}

和画廊的适配器:

public class AddImgAdp extends BaseAdapter {
int GalItemBg;
private Context cont;

private ShadowedImageView[] Imgid;

public AddImgAdp(Context c) {
Imgid = pagesArray;
cont = c;
TypedArray typArray = obtainStyledAttributes(R.styleable.GalleryTheme);
GalItemBg = typArray.getResourceId(R.styleable.GalleryTheme_android_galleryItemBackground, 0);
typArray.recycle();
}

public int getCount() {
return pagesArray.length;
}

public Object getItem(int position) {
return pagesArray[position];
}

public long getItemId(int position) {
return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
ShadowedImageView imgView = pagesArray[position];
pagesArray[position].scale = 1;
pagesArray[position].download(URL_TO_LOAD_IMAGE);

DisplayMetrics dm = new DisplayMetrics();

imgView.setScaleType(ImageView.ScaleType.FIT_XY);
imgView.setBackgroundResource(GalItemBg);
return imgView;
}
}

图像很大,当应用程序读取大量图像时,我的内存不足。我想从内存中删除所有不可见的图像,例如:

                +-------------+
| screen |
[1] [2] [3] [4] | [5] [6] [7] | [8] [9] [10]
| |
+-------------+

图像 1-3 和 9-10 是不必要的 - 所以我想释放内存。怎么做?

最佳答案

我有同样的问题,你需要做的是创建一个与画廊一起使用的自定义适配器,并使用 getView 函数回收位图:

public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(this.myContext);
Bitmap tempBitmap = null;

//Check if my PhotoList at this position is not null...

//Free previous photos
if ((position-3)>=0 && listBitmap.size()-3 >=0 && listBitmap(position-3) != null){
//Here is to free for 1 photo, you can free more ... (3 in your case)
listBitmap(position-3).recycle();
listBitmap(position-3).setBitmap(null);
Log.w(TAG, "Delete Photo-3");
}

关于android - 如何动态卸载图库中的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8377234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com