我需要在我的应用程序中的 pdf 文件回收器视图中显示每个 pdf 文件的缩略图。但是,当我使用 Glide 设置它时,用户界面变得锯齿状。我应该如何创建 PDF 文件第一页的图像?我应该如何存储该文件?请帮帮我,我对此一无所知。
用户界面如下所示:
这是我的代码:
// binds the data to the ImageView in each cell
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
PidifyFile currentFile = files.get(position);
// helper function that adds/removes an item to the list depending on the app's state
// holder.pdfImg.setImageBitmap();
holder.pdfName.setText(currentFile.getName());
Date lModified = currentFile.getDateCreated();
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy hh:mm aa");
holder.pdfDate.setText(sdf.format(lModified));
// holder.pdfSize.setText(humanReadableByteCountSI(currentFile.length()));
//using Glide for smooth loading of images in recycler view
// Glide.with(holder.itemView.getContext())
// .asBitmap()
// .load(pdfToBitmap(new File(currentFile.getFilePath()), holder))
// .into(holder.pdfImg);
}
private Bitmap pdfToBitmap(File pdfFile, ViewHolder holder) {
Bitmap bitmap = null;
try {
PdfRenderer renderer = new PdfRenderer(ParcelFileDescriptor.open(pdfFile, ParcelFileDescriptor.MODE_READ_ONLY));
final int pageCount = renderer.getPageCount();
if (pageCount > 0) {
PdfRenderer.Page page = renderer.openPage(0);
int width = page.getWidth();
int height = page.getHeight();
bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
String timeStamp = new SimpleDateFormat("ddMMyyyy").format(new Date());
String path = pdfFile.getAbsolutePath() + timeStamp + ".jpg";
imgFile = new File(path);
FileOutputStream fos = new FileOutputStream(imgFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.close();
page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
page.close();
renderer.close();
}
} catch (Exception ex) {
ex.printStackTrace();
Log.e("error123", "Nahi ho paya");
}
return bitmap;
}
您是否尝试过使用 Picasso 而不是 Glide 来加载图像?我自己还没有测试过,但也许可以工作,像这样:
Picasso.get().load(new File(currentFile.getFilePath())).into(holder.pdfImg);