我在列表中显示视频缩略图时遇到问题。图像旁边的文件路径有效,但缩略图无效。这是我的代码:
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个唯一字符串,它可以正常工作。谢谢你的帮助!
答案 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。