我有一个Android应用程序,我需要实现一个Gridview,其中包含一个imageview和一个TextView,还有一个按钮,可以将新视图添加到gridview。当我点击这个按钮时,文件选择器将来,并可以选择任何来自我的设备的文档,如pdf,docs,图像等。然后我想将这个文档显示为gridview中的图像及其名称。我怎么能这样做?这就像我们收到带附件的邮件一样(图像,pdf,docs,..),然后当我们打开那个邮件时,我们可以看到它作为图像。我们可以在点击每个文档之前看到该文档的预览图像。我需要完全相同的功能我的gridview。 下面是我用来显示文件选择器的代码。
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
try {
startActivityForResult(Intent.createChooser(intent, "Select a File to Upload"),FILE_SELECT_CODE);
} catch (Exception ex) {
System.out.println("browseClick :"+ex);
}
我实施了
onActivityResult(int requestCode, int resultCode, Intent data){}
选择文件后完成工作。经过大量的研究,我得到了一种方法来创建视频文件的缩略图,如下所示。
ThumbnailUtils.createVideoThumbnail(filePath, kind);
但是没有找到任何东西来获取其他文档的缩略图。
我不知道如何在gridview中显示文档,如图片。请帮帮我。
答案 0 :(得分:0)
要创建此类缩略图,您当然需要先创建pdf的缩略图。您在网络上看到的提供开箱即用的解决方案,以显示pdf内容作为缩略图,但对于Android的事情并不那么顺利。我可以建议你创建转换图像格式的任何页面,然后将转换后的图像显示为pdf的缩略图。在Android中没有直接的方法可以做到这一点,所以你必须依赖第三方库,如this,它可以用于java的pdfbox的移植版本,或者你可以试试this库。还有this另一个库,它可供java使用,不确定它是否适用于android(我还没有尝试过)。 如果它不是最重要的,我建议你只显示pdf指标drawable因为只是为了显示pdf,增加apk大小并不是一个明智的决定,包括这些库。还有一些包含pdf的复杂和高图形,这可能会通过增加Java堆大小来使应用程序崩溃。
答案 1 :(得分:0)
“.pdf”文件有PdfRenderer库。
Android文档就在这里,PDF Renderer Library。不幸的是,这个库添加了API 21。
这个库Create and Display PDF within Android Application
有很好的例子此网站中的此代码。您可以使用此代码创建缩略图。
@TargetApi( Build.VERSION_CODES.LOLLIPOP )
private void generateImageFromPdf(String filePath) {
// filePath must be like : Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath()+"/42080.pdf"
File file = new File(filePath);
// FileDescriptor for file, it allows you to close file when you are
// done with it
ParcelFileDescriptor mFileDescriptor = null;
try {
mFileDescriptor = ParcelFileDescriptor.open(file,
ParcelFileDescriptor.MODE_READ_ONLY);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// PdfRenderer enables rendering a PDF document
PdfRenderer mPdfRenderer = null;
try {
mPdfRenderer = new PdfRenderer(mFileDescriptor);
} catch (IOException e) {
e.printStackTrace();
}
// Open page with specified index
PdfRenderer.Page mCurrentPage = mPdfRenderer.openPage(0);
Bitmap bitmap = Bitmap.createBitmap(mCurrentPage.getWidth(),
mCurrentPage.getHeight(), Bitmap.Config.ARGB_8888);
// Pdf page is rendered on Bitmap
mCurrentPage.render(bitmap, null, null,
PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
// Set rendered bitmap to ImageView (pdfView in my case)
ImageView pdfView = (ImageView) findViewById( R.id.bitmap );
pdfView.setImageBitmap(bitmap);
mCurrentPage.close();
mPdfRenderer.close();
try {
mFileDescriptor.close();
} catch (IOException e) {
e.printStackTrace();
}
}