Android 如何使用通用图像加载器显示视频缩略图
我需要显示视频缩略图使用通用图像加载器,任何帮助pleaz, 我可以从中获取缩略图位图Android 如何使用通用图像加载器显示视频缩略图,android,thumbnails,universal-image-loader,Android,Thumbnails,Universal Image Loader,我需要显示视频缩略图使用通用图像加载器,任何帮助pleaz, 我可以从中获取缩略图位图 Bitmap b= ThumbnailUtils.createVideoThumbnail( "",MediaStore.Images.Thumbnails.MICRO_KIND); 但是如何在imageloader中显示它,因为如果我显示位图,适配器将使移动设备变慢,UIL接受视频的内容://Uri,并知道如何创建缩略图 例如,下面是一个ListFragment,它使用UIL提供
Bitmap b= ThumbnailUtils.createVideoThumbnail(
"",MediaStore.Images.Thumbnails.MICRO_KIND);
但是如何在imageloader中显示它,因为如果我显示位图,适配器将使移动设备变慢,UIL接受视频的
内容://
Uri,并知道如何创建缩略图
例如,下面是一个ListFragment
,它使用UIL提供的缩略图显示视频列表:
/***
Copyright (c) 2013 CommonsWare, LLC
Licensed under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy
of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required
by applicable law or agreed to in writing, software distributed under the
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
OF ANY KIND, either express or implied. See the License for the specific
language governing permissions and limitations under the License.
From _The Busy Coder's Guide to Android Development_
http://commonsware.com/Android
*/
package com.commonsware.android.video.list;
import android.app.Activity;
import android.app.LoaderManager;
import android.content.ContentUris;
import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.CursorAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
public class VideosFragment extends
ContractListFragment<VideosFragment.Contract> implements
LoaderManager.LoaderCallbacks<Cursor>,
SimpleCursorAdapter.ViewBinder {
private ImageLoader imageLoader;
@Override
public void onAttach(Activity host) {
super.onAttach(host);
ImageLoaderConfiguration ilConfig=
new ImageLoaderConfiguration.Builder(getActivity()).build();
imageLoader=ImageLoader.getInstance();
imageLoader.init(ilConfig);
}
@Override
public void onActivityCreated(Bundle state) {
super.onActivityCreated(state);
String[] from=
{ MediaStore.Video.Media.TITLE, MediaStore.Video.Media._ID };
int[] to= { android.R.id.text1, R.id.thumbnail };
SimpleCursorAdapter adapter=
new SimpleCursorAdapter(getActivity(), R.layout.row, null,
from, to, 0);
adapter.setViewBinder(this);
setListAdapter(adapter);
getLoaderManager().initLoader(0, null, this);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
CursorAdapter adapter=(CursorAdapter)getListAdapter();
Cursor c=(Cursor)adapter.getItem(position);
int uriColumn=c.getColumnIndex(MediaStore.Video.Media.DATA);
int mimeTypeColumn=
c.getColumnIndex(MediaStore.Video.Media.MIME_TYPE);
getContract().onVideoSelected(c.getString(uriColumn),
c.getString(mimeTypeColumn));
}
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
return(new CursorLoader(
getActivity(),
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
null, null, null,
MediaStore.Video.Media.TITLE));
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor c) {
((CursorAdapter)getListAdapter()).swapCursor(c);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
((CursorAdapter)getListAdapter()).swapCursor(null);
}
@Override
public boolean setViewValue(View v, Cursor c, int column) {
if (column == c.getColumnIndex(MediaStore.Video.Media._ID)) {
Uri video=
ContentUris.withAppendedId(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
c.getInt(column));
DisplayImageOptions opts=new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_media_video_poster)
.build();
imageLoader.displayImage(video.toString(), (ImageView)v, opts);
return(true);
}
return(false);
}
interface Contract {
void onVideoSelected(String uri, String mimeType);
}
}
/***
版权所有(c)2013 Commonware,LLC
根据Apache许可证2.0版(以下简称“许可证”)获得许可;你不可以
除非符合许可证,否则请使用此文件。你可以得到一份
许可证的有效期在http://www.apache.org/licenses/LICENSE-2.0. 除非需要
根据适用法律或书面同意,根据
许可证按“原样”分发,无任何保证或条件
任何形式的,无论是明示的还是暗示的。请参阅许可证以了解具体的信息
管理许可证下的权限和限制的语言。
从《忙碌的程序员指南》到Android开发_
http://commonsware.com/Android
*/
包com.commonware.android.video.list;
导入android.app.Activity;
导入android.app.LoaderManager;
导入android.content.ContentUris;
导入android.content.CursorLoader;
导入android.content.Loader;
导入android.database.Cursor;
导入android.net.Uri;
导入android.os.Bundle;
导入android.provider.MediaStore;
导入android.view.view;
导入android.widget.CursorAdapter;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.SimpleCursorAdapter;
导入com.nostra13.universalimageloader.core.DisplayImageOptions;
导入com.nostra13.universalimageloader.core.ImageLoader;
导入com.nostra13.universialimageloader.core.imageloader配置;
公共类VideosFragment扩展
ContractListFragment实现
LoaderManager.LoaderCallbacks,
SimpleCursorAdapter.ViewBinder{
私有图像加载器;
@凌驾
公共活动主机(活动主机){
超级主机;
ImageLoaderConfiguration ilConfig=
新建ImageLoaderConfiguration.Builder(getActivity()).build();
imageLoader=imageLoader.getInstance();
init(ilConfig);
}
@凌驾
已创建ActivityCreated上的公共无效(捆绑状态){
super.onActivityCreated(state);
字符串[]来自=
{MediaStore.Video.Media.TITLE,MediaStore.Video.Media.\u ID};
int[]to={android.R.id.text1,R.id.thumbnail};
SimpleCorsorAdapter适配器=
新的SimpleCursorAdapter(getActivity(),R.layout.row,null,
从,到,0);
adapter.setViewBinder(这个);
setListAdapter(适配器);
getLoaderManager().initLoader(0,null,this);
}
@凌驾
public void onListItemClick(列表视图l、视图v、整数位置、长id){
CursorAdapter=(CursorAdapter)getListAdapter();
游标c=(游标)适配器.getItem(位置);
int-uriColumn=c.getColumnIndex(MediaStore.Video.Media.DATA);
int mimetype列=
c、 getColumnIndex(MediaStore.Video.Media.MIME_类型);
getContract().onVideoSelected(c.getString(uriColumn)),
c、 getString(mimeTypeColumn));
}
@凌驾
公共加载器onCreateLoader(int arg0,Bundle arg1){
返回(新游标装入器)(
getActivity(),
MediaStore.Video.Media.EXTERNAL\u CONTENT\u URI,
空,空,空,
MediaStore.Video.Media.TITLE);
}
@凌驾
public void onLoadFinished(加载器,光标c){
((CursorAdapter)getListAdapter()).swapCursor(c);
}
@凌驾
公共void onLoaderReset(加载器){
((CursorAdapter)getListAdapter()).swapCursor(null);
}
@凌驾
公共布尔值setViewValue(视图v、光标c、int列){
if(column==c.getColumnIndex(MediaStore.Video.Media.\u ID)){
Uri视频=
ContentUris.withAppendedId(MediaStore.Video.Media.EXTERNAL\u CONTENT\u URI,
c、 getInt(列);
DisplayImageOptions opts=新建DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic\媒体\视频\海报)
.build();
imageLoader.displayImage(video.toString(),(ImageView)v,opts);
返回(真);
}
返回(假);
}
接口合同{
void onVideoSelected(字符串uri、字符串mimeType);
}
}
(来自)
在setViewValue()
中,我获取视频ID,通过ContentUris.withAppendedId()
组装相关视频内容://
public void setImageThumbnail(String videoPath, ImageView imgView) {
Bitmap b=ThumbnailUtils.createVideoThumbnail(videoPath,MediaStore.Images.Thumbnails.MICRO_KIND);
imgView.setImageBitmap(b);
}
这将对您有所帮助。不,我不需要“setImageBitmap”,因为我在适配器中工作,因此使用位图的工作会使移动速度非常慢,我需要使用ImageLoader中的uri加载缩略图再次检查我的答案。是的,请在“B”部分解释更多您的答案,如何将位图加载到我的任务中imageview@mostafa哈希姆请检查示例链接。这可以解释你的怀疑。