gpt4 book ai didi

android - base64 图像的回收 View -滚动缓慢且滞后

转载 作者:搜寻专家 更新时间:2023-11-01 09:37:19 26 4
gpt4 key购买 nike

我正在使用一个回收器 View ,其中有我从服务器获取的 base64 字符串形式的图像列表。下面是我正在使用的适配器代码,我正在将 base64 字符串转换为异步任务中的位图。当我滚动浏览图像列表时,滚动速度缓慢且滞后。如何优化我的代码以使其流畅?

 public class ImageListAdapter extends RecyclerView.Adapter<ImageListAdapter.MyViewHolder> {

private ArrayList<Message> imagesEncodedList;
private Context context;

public ImageListAdapter(Context context, ArrayList<Message> imagesEncodedList) {
this.imagesEncodedList = imagesEncodedList;
this.context = context;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_image_list, parent, false);

return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {

if (imagesEncodedList.get(position).getImage() != null)
{
DownloadImageTask downloadImageTask=new DownloadImageTask(holder.imageView);
downloadImageTask.execute(imagesEncodedList.get(position).getImage());
}
else
{
DownloadImageTask downloadImageTask=new DownloadImageTask(holder.imageView);
downloadImageTask.execute(UriToBase64(Uri.parse(imagesEncodedList.get(position).getUri())));
}

if(imagesEncodedList.get(position).getPosted())
holder.item.setBackgroundResource(R.drawable.greenbordercolour);
else
holder.item.setBackgroundResource(R.drawable.redbordercolour);
}

@Override
public int getItemCount() {
return imagesEncodedList.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder {
private ImageView imageView;
private LinearLayout item;


public MyViewHolder(View view) {
super(view);
imageView = (ImageView) view.findViewById(R.id.imageItem);
item=(LinearLayout)view.findViewById(R.id.item);
}
}

private Bitmap getResizedBitmap(Bitmap image, int bitmapWidth, int bitmapHeight) {
return Bitmap.createScaledBitmap(image, bitmapWidth, bitmapHeight, true);
}

private String bitmapToBase64(Bitmap bitmap) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream.toByteArray();
return Base64.encodeToString(byteArray, Base64.DEFAULT);
}



private String UriToBase64(Uri uri) {
Bitmap bm = null;
try {
bm = MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);
} catch (IOException e) {
Log.e("BHUVNESH", "IOException" + e);
e.printStackTrace();
}


Bitmap resizedBitmap = getResizedBitmap(bm, 300, 300);
return bitmapToBase64(resizedBitmap);
}

private class DownloadImageTask extends AsyncTask<String, Integer, Bitmap> {
ImageView imageView;
DownloadImageTask(ImageView imageView)
{
this.imageView=imageView;
}
protected Bitmap doInBackground(String... urls) {
byte[] imageAsBytes = Base64.decode(urls[0].getBytes(), Base64.DEFAULT);
return BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length);

}

protected void onProgressUpdate(Integer... progress) {
}

protected void onPostExecute(Bitmap result) {
imageView.setImageBitmap(result);
}
}

}

最佳答案

总是使用 picasso/glide 库在你的 recyclerview 中设置图像。

关于android - base64 图像的回收 View -滚动缓慢且滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42067940/

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