列表中的视频缩略图

时间:2013-09-13 01:11:25

标签: java android

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

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个唯一字符串,它可以正常工作。谢谢你的帮助!

2 个答案:

答案 0 :(得分: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));
  }

}

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

答案 1 :(得分:0)

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

  

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