1

我无法在列表中显示视频缩略图。图像旁边的文件路径有效,但缩略图无效。这是我的代码:

MainActivity.java:

public class MainActivity extends ListActivity{

File path = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Videos/");

String[] videoFileList = path.list();

public class MyThumbnaildapter extends ArrayAdapter<String>{

    public MyThumbnaildapter(Context context, int textViewResourceId,
            String[] objects) {
        super(context, textViewResourceId, objects);
        // TODO Auto-generated constructor stub
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        View row = convertView;
        if(row==null){
            LayoutInflater inflater=getLayoutInflater();
            row=inflater.inflate(R.layout.row, parent, false);
        }

        TextView textfilePath = (TextView)row.findViewById(R.id.FilePath);
        textfilePath.setText(videoFileList[position]);
        ImageView imageThumbnail = (ImageView)row.findViewById(R.id.Thumbnail);

        Bitmap bmThumbnail;
        bmThumbnail = ThumbnailUtils.createVideoThumbnail(videoFileList[position], Thumbnails.MINI_KIND);
        imageThumbnail.setImageBitmap(bmThumbnail);

        return row;
    }

}

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setListAdapter(new MyThumbnaildapter(MainActivity.this, R.layout.row, videoFileList));
}

}

我的 row.xml 文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/Thumbnail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon"/>
<TextView
android:id="@+id/FilePath"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>

文件路径显示正确,但图像不正确。我怀疑问题出在我的 row.xml 中,但没有错误。如果我将它定向到我手动设置路径的 2 个视频,使用 2 个唯一字符串,它可以正常工作。谢谢你的帮助!

4

2 回答 2

1

你确定你得到的是文件视频路径而不是视频名称吗?我认为您正在获取视频名称,因为在 videoFileList 数组中您正在存储 "/Videos/" 之后的字符串。这意味着您不是存储路径,而是存储“视频”文件夹中的文件。要获取缩略图,您需要文件路径而不是文件名。要仅从视频文件夹中获取视频,您可以像这样使用游标。

public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      final String[] proj = { MediaStore.Video.Media.DATA };
      String folder="bluetooth";
     Cursor cursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
            proj, MediaStore.Video.Media.DATA + " like ? ",
            new String[] { "%" + folder + "%" }, null);
     videopath=new ArrayList<String>();
     while (cursor.moveToNext()) {

            videopath.add(cursor.getString(0));
        }
      setListAdapter(new MyThumbnaildapter(AndroidThumbnailList.this, R.layout.row, videopath));
  }
}

并以这种方式修改您的代码

1.

  public MyThumbnaildapter(Context context, int textViewResourceId,
        String[] objects) {
    super(context, textViewResourceId, objects);

替换为下面

 public MyThumbnaildapter(Context context, int textViewResourceId,
            ArrayList<String> videopath) {
 super(context, textViewResourceId, videopath);

2.

  videoFileList[position]

代替

  videopath.get(position)

更新:如果文件扩展名不是视频类型,那么上面的代码会出错,所以更新你的 onCreate

  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      videopath=new ArrayList<String>();
      File path = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/bluetooth/");
      File[] files = path.listFiles();
      for( File f : files ){


                  String absPath = f.getAbsolutePath();
                  videopath.add(absPath);


      }

      setListAdapter(new MyThumbnaildapter(AndroidThumbnailList.this, R.layout.row, videopath));
  }

}

更新后的代码将填充蓝牙文件夹中的所有文件、视频和非视频文件,并将返回视频的缩略图。

于 2013-09-13T06:15:23.383 回答
0

您介意检查创建的缩略图是否为 NULL。根据文档,它说

为视频创建视频缩略图。如果视频损坏或格式不受支持,则可能返回 null。

于 2013-09-13T01:17:51.220 回答