Android:如何将所选文档动态添加到imageview作为Gridview内的预览/缩略图

时间:2016-02-26 09:40:51

标签: android gridview android-arrayadapter baseadapter

我有一个Android应用程序,我需要实现一个Gridview,其中包含一个imageview和一个TextView,还有一个按钮,可以将新视图添加到gridview。当我点击这个按钮时,文件选择器将来,并可以选择任何来自我的设备的文档,如pdf,docs,图像等。然后我想将这个文档显示为gridview中的图像及其名称。我怎么能这样做?这就像我们收到带附件的邮件一样(图像,pdf,docs,..),然后当我们打开那个邮件时,我们可以看到它作为图像。我们可以在点击每个文档之前看到该文档的预览图像。我需要完全相同的功能我的gridview。 Attachment 下面是我用来显示文件选择器的代码。

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中显示文档,如图片。请帮帮我。

2 个答案:

答案 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();
        }
    }