Android:如何动态添加选定的文档到ImageView作为预览/缩略图在Gridview中

问题描述:

我有一个android应用程序,我需要实现一个包含imageview和TextView的Gridview,也有一个按钮来添加新的视图gridview.When我点击这个按钮时,一个文件选择器会来,并可以从我的设备中选择任何文档,如PDF,文档,图像等。然后我想要显示这个文档作为一个图像在gridview中的名称。如何我是这么做的吗?如果我们收到带附件的邮件(图片,pdf,docs,..),那么我们可以在打开该邮件时将其视为图片。这就是我们可以看到的预览图像该文件之前,我们点击每个文件如下。我需要在我的GridView完全相同的功能。 Attachment 下面是我用来显示文件选择器的代码。Android:如何动态添加选定的文档到ImageView作为预览/缩略图在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){} 

选择file.After这么多的研究,我得到了创建如下视频文件的缩略图的方法后做的工作。

ThumbnailUtils.createVideoThumbnail(filePath, kind); 

但是没有找到任何东西来获取其他文件的缩略图。

我不知道如何在gridview像images.Please帮助我显示文档。

+0

的文档通常的邮件客户端显示PDF,Word文件等,并缩略图图像的图标。 当你选择文件检查mimeType如果它是图像在图像上显示缩略图 如果它是PDF然后显示PDF图标(把图标放在可绘制文件夹中),并显示与其他文件相同的情况。 –

+0

但在邮件中,我认为我们可以在打开pdf之前看到PDF的内容就像一张小图片。 – KJEjava48

+0

不,我们可以把pdf的名称在textView –

要创建这样的缩略图,当然需要首先创建pdf的缩略图。你在网上看到的提供开箱即用的解决方案,将PDF内容显示为缩略图,但对于android来说并不那么顺利。我可以建议你创建转换图像格式的任何页面,并将转换后的图像显示为PDF的缩略图。在android中没有直接的方法来做到这一点,所以你必须依赖像this这样的第三方库,它是可用于java的pdfbox的移植版本,或者你可以尝试使用this库。有this另一个库只是可用于Java不知道它是否也适用于Android(我还没有尝试过)。 如果不是最大的必要条件,我建议你只显示pdf指示器,因为只是为了显示PDF,增加apk大小并不是一个明智的决定,包括这些库。还有一些复杂和高图形包含PDF,可能会通过增加Java堆大小而导致应用程序崩溃。

有“.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(); 
     } 
    }