增加展示本地视频文件demo,新写法
This commit is contained in:
parent
5fb5643a21
commit
5a8781a5c0
|
@ -25,11 +25,9 @@ import com.zftlive.android.library.base.bean.AdapterModelBean;
|
||||||
*/
|
*/
|
||||||
public class ImageFileBean extends AdapterModelBean {
|
public class ImageFileBean extends AdapterModelBean {
|
||||||
|
|
||||||
public String title = "";
|
|
||||||
|
|
||||||
public String imageURL = "";
|
public String imageURL = "";
|
||||||
|
|
||||||
public int id = 0;
|
public String id = "";
|
||||||
|
|
||||||
public String displayName = "";
|
public String displayName = "";
|
||||||
|
|
||||||
|
@ -41,11 +39,49 @@ public class ImageFileBean extends AdapterModelBean {
|
||||||
|
|
||||||
public String path = "";
|
public String path = "";
|
||||||
|
|
||||||
|
public String resolution = "";
|
||||||
|
|
||||||
|
public String addDate = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 原图uri
|
||||||
|
*/
|
||||||
|
public String originUri;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 原图path
|
||||||
|
*/
|
||||||
|
public String originPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 缩略图uri
|
||||||
|
*/
|
||||||
|
public String thumbnailUri;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否视频
|
||||||
|
*/
|
||||||
|
public boolean isVideo = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标题
|
||||||
|
*/
|
||||||
|
public String title = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 视频时长 ms
|
||||||
|
*/
|
||||||
public long duration = 0;
|
public long duration = 0;
|
||||||
|
|
||||||
public long size = 0;
|
/**
|
||||||
|
* 视频时长文案
|
||||||
|
*/
|
||||||
|
public String durationText = "";
|
||||||
|
|
||||||
public String resolution = "";
|
/**
|
||||||
|
* 视频大小 byte
|
||||||
|
*/
|
||||||
|
public long size = 0;
|
||||||
|
|
||||||
public ImageFileBean() {
|
public ImageFileBean() {
|
||||||
|
|
||||||
|
|
|
@ -18,31 +18,49 @@
|
||||||
|
|
||||||
package com.zftlive.android.sample.imagepicker;
|
package com.zftlive.android.sample.imagepicker;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
import android.annotation.TargetApi;
|
||||||
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.v4.app.ActivityCompat;
|
||||||
|
import android.support.v4.app.LoaderManager;
|
||||||
|
import android.support.v4.content.ContextCompat;
|
||||||
|
import android.support.v4.content.CursorLoader;
|
||||||
|
import android.support.v4.content.Loader;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.GridView;
|
import android.widget.GridView;
|
||||||
|
|
||||||
import com.zftlive.android.R;
|
import com.zftlive.android.R;
|
||||||
|
import com.zftlive.android.library.Logger;
|
||||||
import com.zftlive.android.library.base.ui.CommonActivity;
|
import com.zftlive.android.library.base.ui.CommonActivity;
|
||||||
import com.zftlive.android.library.common.adapter.SingleTypeAdapter;
|
import com.zftlive.android.library.common.adapter.SingleTypeAdapter;
|
||||||
|
import com.zftlive.android.library.tools.ToolDateTime;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 异步加载图片示例DEMO,防止图片错位
|
* 加载本地图片和视频展示+预览
|
||||||
* @author 曾繁添
|
* @author 曾繁添
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class ImagePickerActivity extends CommonActivity {
|
public class ImagePickerActivity extends CommonActivity implements LoaderManager.LoaderCallbacks<Cursor>{
|
||||||
|
|
||||||
private GridView mListView;
|
private GridView mListView;
|
||||||
private SingleTypeAdapter mMyListViewAdapter;
|
private SingleTypeAdapter mMyListViewAdapter;
|
||||||
|
private static final int REQUEST_READ_EXTERNAL_STORAGE_PERMISSION = 123;
|
||||||
|
private String strCenterTitle = "";
|
||||||
@Override
|
@Override
|
||||||
public int bindLayout() {
|
public int bindLayout() {
|
||||||
return R.layout.activity_image_grid;
|
return R.layout.activity_image_grid;
|
||||||
|
@ -58,7 +76,7 @@ public class ImagePickerActivity extends CommonActivity {
|
||||||
public void initView(View view) {
|
public void initView(View view) {
|
||||||
mListView = (GridView)findViewById(R.id.gv_square);
|
mListView = (GridView)findViewById(R.id.gv_square);
|
||||||
//初始化带返回按钮的标题栏
|
//初始化带返回按钮的标题栏
|
||||||
String strCenterTitle = getResources().getString(R.string.ImagePickerActivity);
|
strCenterTitle = getResources().getString(R.string.ImagePickerActivity);
|
||||||
// ActionBarManager.initBackTitle(getContext(), getActionBar(), strCenterTitle);
|
// ActionBarManager.initBackTitle(getContext(), getActionBar(), strCenterTitle);
|
||||||
mWindowTitle.initBackTitleBar(strCenterTitle);
|
mWindowTitle.initBackTitleBar(strCenterTitle);
|
||||||
}
|
}
|
||||||
|
@ -67,27 +85,43 @@ public class ImagePickerActivity extends CommonActivity {
|
||||||
public void doBusiness(Context mContext) {
|
public void doBusiness(Context mContext) {
|
||||||
mMyListViewAdapter = new SingleTypeAdapter(this);
|
mMyListViewAdapter = new SingleTypeAdapter(this);
|
||||||
mMyListViewAdapter.registeViewTemplet(MyGridViewTemplet.class);
|
mMyListViewAdapter.registeViewTemplet(MyGridViewTemplet.class);
|
||||||
initData();
|
|
||||||
mListView.setAdapter(mMyListViewAdapter);
|
mListView.setAdapter(mMyListViewAdapter);
|
||||||
|
initData();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initData(){
|
private void initData(){
|
||||||
mMyListViewAdapter.clear();
|
// mMyListViewAdapter.clear();
|
||||||
mMyListViewAdapter.addItem(getLoadMedia());
|
// mMyListViewAdapter.addItem(getLoadMedia());
|
||||||
|
|
||||||
// //构造数据
|
// 检测读取、写入权限
|
||||||
// for (int i = 0; i < 20; i++) {
|
if (ContextCompat.checkSelfPermission(mActivity, Manifest.permission.READ_EXTERNAL_STORAGE)
|
||||||
// mMyListViewAdapter.addItem(new ImageRowBean(i+1+"-"+titles[i],imageURLs[i]));
|
== PackageManager.PERMISSION_GRANTED &&
|
||||||
// }
|
ContextCompat.checkSelfPermission(mActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||||
// mListView.postDelayed(new Runnable() {
|
== PackageManager.PERMISSION_GRANTED) {
|
||||||
// @Override
|
startLoader();
|
||||||
// public void run() {
|
} else if (ActivityCompat.shouldShowRequestPermissionRationale(mActivity, Manifest.permission.READ_EXTERNAL_STORAGE)
|
||||||
// if(mListView.isRefreshing()){
|
|| ActivityCompat.shouldShowRequestPermissionRationale(mActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||||
// mListView.setRefreshing(false);
|
// empty code
|
||||||
// }
|
} else {
|
||||||
// }
|
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||||
// },200);
|
REQUEST_READ_EXTERNAL_STORAGE_PERMISSION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||||
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
|
// 权限授权结果
|
||||||
|
if (requestCode == REQUEST_READ_EXTERNAL_STORAGE_PERMISSION &&
|
||||||
|
grantResults[0] == PackageManager.PERMISSION_GRANTED &&
|
||||||
|
grantResults[1] == PackageManager.PERMISSION_GRANTED) {
|
||||||
|
startLoader();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void startLoader() {
|
||||||
|
mOperation.showLoading("正在查询数据");
|
||||||
|
mActivity.getSupportLoaderManager().initLoader(0, null, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList getLoadMedia() {
|
public ArrayList getLoadMedia() {
|
||||||
|
@ -109,7 +143,7 @@ public class ImagePickerActivity extends CommonActivity {
|
||||||
String resolution =cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.RESOLUTION));
|
String resolution =cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.RESOLUTION));
|
||||||
|
|
||||||
ImageFileBean item = new ImageFileBean();
|
ImageFileBean item = new ImageFileBean();
|
||||||
item.id = id;
|
item.id = id+"";
|
||||||
item.displayName = displayName;
|
item.displayName = displayName;
|
||||||
item.album = album;
|
item.album = album;
|
||||||
item.artist = artist;
|
item.artist = artist;
|
||||||
|
@ -121,6 +155,8 @@ public class ImagePickerActivity extends CommonActivity {
|
||||||
item.size = size;
|
item.size = size;
|
||||||
item.resolution = resolution;
|
item.resolution = resolution;
|
||||||
|
|
||||||
|
Logger.d(TAG,"id="+id + " title="+title + " mimeType="+mimeType +" resolution="+resolution+ " path="+path +" duration="+duration + " size="+size);
|
||||||
|
|
||||||
result.add(item);
|
result.add(item);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -131,4 +167,213 @@ public class ImagePickerActivity extends CommonActivity {
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String[] thumbColumns = { MediaStore.Video.Thumbnails.DATA };
|
||||||
|
public static String[] mediaColumns = { MediaStore.Video.Media._ID };
|
||||||
|
|
||||||
|
public static String getThumbnailPathForLocalFile(Activity context, Uri fileUri) {
|
||||||
|
|
||||||
|
long fileId = getFileId(context, fileUri);
|
||||||
|
|
||||||
|
MediaStore.Video.Thumbnails.getThumbnail(context.getContentResolver(),
|
||||||
|
fileId, MediaStore.Video.Thumbnails.MICRO_KIND, null);
|
||||||
|
|
||||||
|
Cursor thumbCursor = null;
|
||||||
|
try {
|
||||||
|
|
||||||
|
thumbCursor = context.managedQuery(
|
||||||
|
MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI,
|
||||||
|
thumbColumns, MediaStore.Video.Thumbnails.VIDEO_ID + " = "
|
||||||
|
+ fileId, null, null);
|
||||||
|
|
||||||
|
if (thumbCursor.moveToFirst()) {
|
||||||
|
String thumbPath = thumbCursor.getString(thumbCursor
|
||||||
|
.getColumnIndex(MediaStore.Video.Thumbnails.DATA));
|
||||||
|
|
||||||
|
return thumbPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static long getFileId(Activity context, Uri fileUri) {
|
||||||
|
|
||||||
|
Cursor cursor = context.managedQuery(fileUri, mediaColumns, null, null,
|
||||||
|
null);
|
||||||
|
|
||||||
|
if (cursor.moveToFirst()) {
|
||||||
|
int columnIndex = cursor
|
||||||
|
.getColumnIndexOrThrow(MediaStore.Video.Media._ID);
|
||||||
|
int id = cursor.getInt(columnIndex);
|
||||||
|
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public Loader<Cursor> onCreateLoader(int id, @Nullable Bundle bundle) {
|
||||||
|
String selection = null;
|
||||||
|
String[] mimeTypes = new String[]{MimeType.MP4, MimeType.JPEG, MimeType.PNG};
|
||||||
|
if (mimeTypes != null) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (int j = 0; j < mimeTypes.length; j++) {
|
||||||
|
sb.append("mime_type=?");
|
||||||
|
if (j + 1 < mimeTypes.length) {
|
||||||
|
sb.append(" or ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
selection = sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
Uri uri = MediaStore.Files.getContentUri("external");
|
||||||
|
// uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
|
||||||
|
// uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
|
||||||
|
|
||||||
|
return new CursorLoader(
|
||||||
|
mActivity,
|
||||||
|
uri,
|
||||||
|
COLUMNS_NAME,
|
||||||
|
selection,
|
||||||
|
mimeTypes,
|
||||||
|
DATE_ADDED + " DESC"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadFinished(@NonNull Loader<Cursor> loader, Cursor cursor) {
|
||||||
|
|
||||||
|
ArrayList result = new ArrayList();
|
||||||
|
|
||||||
|
try {
|
||||||
|
int countVideo = 0;
|
||||||
|
if (cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) {
|
||||||
|
do {
|
||||||
|
String _id = cursor.getString(cursor.getColumnIndex(_ID));
|
||||||
|
String storage_id = cursor.getString(cursor.getColumnIndex(STORAGE_ID));
|
||||||
|
String title =cursor.getString(cursor.getColumnIndex(TITLE));
|
||||||
|
String _data = cursor.getString(cursor.getColumnIndex(DATA));
|
||||||
|
String _display_name = cursor.getString(cursor.getColumnIndex(DISPLAY_NAME));
|
||||||
|
String mime_type = cursor.getString(cursor.getColumnIndex(MIME_TYPE));
|
||||||
|
String media_type = cursor.getString(cursor.getColumnIndex(MEDIA_TYPE));
|
||||||
|
String bucket_display_name = cursor.getString(cursor.getColumnIndex(BUCKET_DISPLAY_NAME));
|
||||||
|
long size = cursor.getLong(cursor.getColumnIndex(SIZE)); // 大小
|
||||||
|
long addDate = cursor.getLong(cursor.getColumnIndex(DATE_ADDED)); // 添加日期
|
||||||
|
|
||||||
|
String originalUri =
|
||||||
|
MediaStore.Images.Media.EXTERNAL_CONTENT_URI
|
||||||
|
.buildUpon()
|
||||||
|
.appendPath(_id)
|
||||||
|
.build()
|
||||||
|
.toString();
|
||||||
|
|
||||||
|
ImageFileBean bean = new ImageFileBean();
|
||||||
|
bean.title = title;
|
||||||
|
bean.originUri = originalUri;
|
||||||
|
bean.originPath = _data;
|
||||||
|
// 这里不用缩略图测试下
|
||||||
|
bean.thumbnailUri = originalUri;//getThumbnailPathForLocalFile(mActivity,Uri.parse(path));
|
||||||
|
bean.isVideo = (MimeType.MP4.equals(mime_type) ? true : false);
|
||||||
|
if(bean.isVideo){
|
||||||
|
countVideo++;
|
||||||
|
}
|
||||||
|
bean.id = _id;
|
||||||
|
bean.displayName = _display_name;
|
||||||
|
// bean.album = album;
|
||||||
|
// bean.artist = artist;
|
||||||
|
bean.title = title;
|
||||||
|
bean.mimeType = mime_type;
|
||||||
|
bean.path = _data;
|
||||||
|
bean.imageURL = _data;
|
||||||
|
bean.durationText = (bean.isVideo?getMediaDuring(_data):"");
|
||||||
|
bean.duration = getMediaDuringLong(bean.durationText);
|
||||||
|
bean.size = size;
|
||||||
|
// bean.resolution = resolution;
|
||||||
|
bean.addDate = ToolDateTime.formatDateTime(new Date(addDate * 1000L),ToolDateTime.DF_YYYY_MM_DD_HH_MM_SS);
|
||||||
|
result.add(bean);
|
||||||
|
|
||||||
|
Logger.d(TAG,"id="+_id +" storage_id="+storage_id+ " addDate="+bean.addDate+ " durationText="+bean.durationText+" size="+size + " mimeType="+mime_type +" title="+title + " path="+_data +" _display_name="+_display_name );
|
||||||
|
|
||||||
|
} while (cursor.moveToNext());
|
||||||
|
}
|
||||||
|
|
||||||
|
mWindowTitle.getTitleTextView().setText(strCenterTitle+"(总计:"+result.size()+" 视频:"+countVideo +"其余:"+(result.size()-countVideo)+")");
|
||||||
|
mMyListViewAdapter.clear();
|
||||||
|
mMyListViewAdapter.addItem(result);
|
||||||
|
mMyListViewAdapter.notifyDataSetChanged();
|
||||||
|
|
||||||
|
} catch (Throwable e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
if(null != cursor && !cursor.isClosed()){
|
||||||
|
cursor.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//关闭loading
|
||||||
|
mOperation.closeLoading();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoaderReset(@NonNull Loader<Cursor> loader) {
|
||||||
|
mMyListViewAdapter.clear();
|
||||||
|
mMyListViewAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final String _ID = MediaStore.Files.FileColumns._ID;
|
||||||
|
private static final String STORAGE_ID = "storage_id";
|
||||||
|
private static final String SIZE = MediaStore.Files.FileColumns.SIZE;
|
||||||
|
private static final String TITLE = MediaStore.Files.FileColumns.TITLE;
|
||||||
|
private static final String DATE_ADDED = MediaStore.Files.FileColumns.DATE_ADDED;
|
||||||
|
private static final String DATA = MediaStore.Files.FileColumns.DATA;
|
||||||
|
private static final String DISPLAY_NAME = MediaStore.Files.FileColumns.DISPLAY_NAME;
|
||||||
|
private static final String MIME_TYPE = MediaStore.Files.FileColumns.MIME_TYPE;
|
||||||
|
private static final String MEDIA_TYPE = MediaStore.Files.FileColumns.MEDIA_TYPE;
|
||||||
|
private static final String BUCKET_DISPLAY_NAME = "bucket_display_name";
|
||||||
|
|
||||||
|
private static final String[] COLUMNS_NAME = {
|
||||||
|
_ID,
|
||||||
|
STORAGE_ID,
|
||||||
|
TITLE,
|
||||||
|
DATE_ADDED,
|
||||||
|
SIZE,
|
||||||
|
DATA,
|
||||||
|
DISPLAY_NAME,
|
||||||
|
MIME_TYPE,
|
||||||
|
MEDIA_TYPE,
|
||||||
|
BUCKET_DISPLAY_NAME
|
||||||
|
};
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.GINGERBREAD_MR1)
|
||||||
|
public static String getMediaDuring(String mUri) {
|
||||||
|
String duration = "";
|
||||||
|
android.media.MediaMetadataRetriever mmr = new android.media.MediaMetadataRetriever();
|
||||||
|
try {
|
||||||
|
if (mUri != null) {
|
||||||
|
mmr.setDataSource(mUri);
|
||||||
|
}
|
||||||
|
duration = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_DURATION);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
} finally {
|
||||||
|
mmr.release();
|
||||||
|
}
|
||||||
|
return duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Long getMediaDuringLong(String strDuration) {
|
||||||
|
Long duration = 0L;
|
||||||
|
try {
|
||||||
|
if(!TextUtils.isEmpty(strDuration)){
|
||||||
|
duration = Long.parseLong(strDuration);
|
||||||
|
}
|
||||||
|
} catch (Throwable ex) {
|
||||||
|
}
|
||||||
|
return duration;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
package com.zftlive.android.sample.imagepicker;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by jay on 2017/11/29 下午4:28
|
||||||
|
*/
|
||||||
|
public final class MimeType {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* image
|
||||||
|
*/
|
||||||
|
public final static int IMAGE = 1;
|
||||||
|
/**
|
||||||
|
* video
|
||||||
|
*/
|
||||||
|
public final static int VIDEO = 2;
|
||||||
|
/**
|
||||||
|
* image + video
|
||||||
|
*/
|
||||||
|
public final static int IMAGE_AND_VIDEO = 3;
|
||||||
|
|
||||||
|
// IMAGE
|
||||||
|
public final static String JPG = "image/jpeg";
|
||||||
|
public final static String JPEG = "image/jpeg";
|
||||||
|
public final static String GIF = "image/gif";
|
||||||
|
public final static String PNG = "image/png";
|
||||||
|
public final static String BMP = "image/x-ms-bmp";
|
||||||
|
public final static String WBMP = "image/vnd.wap.wbmp";
|
||||||
|
public final static String DNG = "image/x-adobe-dng";
|
||||||
|
public final static String CR2 = "image/x-canon-cr2";
|
||||||
|
public final static String NEF = "image/x-nikon-nef";
|
||||||
|
public final static String NRW = "image/x-nikon-nrw";
|
||||||
|
public final static String ARW = "image/x-sony-arw";
|
||||||
|
public final static String RW2 = "image/x-panasonic-rw2";
|
||||||
|
public final static String ORF = "image/x-olympus-orf";
|
||||||
|
public final static String RAF = "image/x-fuji-raf";
|
||||||
|
public final static String PEF = "image/x-pentax-pef";
|
||||||
|
public final static String SRW = "image/x-samsung-srw";
|
||||||
|
|
||||||
|
// VIDEO
|
||||||
|
public final static String MPEG = "video/mpeg";
|
||||||
|
public final static String MPG = "video/mpeg";
|
||||||
|
public final static String MP4 = "video/mp4";
|
||||||
|
public final static String M4V = "video/mp4";
|
||||||
|
public final static String MOV = "video/quicktime";
|
||||||
|
public final static String THREEGP = "video/3gpp";
|
||||||
|
public final static String THREEGPP = "video/3gpp";
|
||||||
|
public final static String THREEG2 = "video/3gpp2";
|
||||||
|
public final static String THREEGPP2 = "video/3gpp2";
|
||||||
|
public final static String MKV = "video/x-matroska";
|
||||||
|
public final static String WEBM = "video/webm";
|
||||||
|
public final static String TS = "video/mp2ts";
|
||||||
|
public final static String AVI = "video/avi";
|
||||||
|
public final static String WMV = "video/x-ms-wmv";
|
||||||
|
public final static String ASF = "video/x-ms-asf";
|
||||||
|
}
|
|
@ -25,11 +25,19 @@ import android.view.View;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.bumptech.glide.Glide;
|
||||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
||||||
import com.zftlive.android.R;
|
import com.zftlive.android.R;
|
||||||
|
import com.zftlive.android.library.base.IBaseConstant;
|
||||||
import com.zftlive.android.library.base.adapter.IAdapterModel;
|
import com.zftlive.android.library.base.adapter.IAdapterModel;
|
||||||
import com.zftlive.android.library.base.templet.AbsViewTemplet;
|
import com.zftlive.android.library.base.templet.AbsViewTemplet;
|
||||||
import com.zftlive.android.library.imageloader.ToolImage;
|
import com.zftlive.android.library.imageloader.ToolImage;
|
||||||
|
import com.zftlive.android.library.imageloader.picture.PictureBean;
|
||||||
|
import com.zftlive.android.library.imageloader.picture.PictureViewerActivity;
|
||||||
|
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 视图模板
|
* 视图模板
|
||||||
|
@ -38,7 +46,8 @@ public class MyGridViewTemplet extends AbsViewTemplet {
|
||||||
|
|
||||||
DisplayImageOptions option;
|
DisplayImageOptions option;
|
||||||
ImageView iv_icon;
|
ImageView iv_icon;
|
||||||
TextView tv_title;
|
TextView tv_title,tv_adddate,tv_size,tv_video_duration;
|
||||||
|
View rl_video_area;
|
||||||
|
|
||||||
public MyGridViewTemplet(Context mContext) {
|
public MyGridViewTemplet(Context mContext) {
|
||||||
super(mContext);
|
super(mContext);
|
||||||
|
@ -54,15 +63,24 @@ public class MyGridViewTemplet extends AbsViewTemplet {
|
||||||
public void initView() {
|
public void initView() {
|
||||||
iv_icon = (ImageView) findViewById(R.id.iv_icon);
|
iv_icon = (ImageView) findViewById(R.id.iv_icon);
|
||||||
tv_title = (TextView) findViewById(R.id.tv_title);
|
tv_title = (TextView) findViewById(R.id.tv_title);
|
||||||
|
tv_adddate = (TextView) findViewById(R.id.tv_adddate);
|
||||||
|
tv_size = (TextView) findViewById(R.id.tv_size);
|
||||||
|
tv_video_duration = (TextView)findViewById(R.id.tv_video_duration);
|
||||||
|
rl_video_area = findViewById(R.id.rl_video_area);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fillData(IAdapterModel model, int postion) {
|
public void fillData(IAdapterModel model, int postion) {
|
||||||
|
|
||||||
ImageFileBean rowBean = (ImageFileBean) model;
|
ImageFileBean rowBean = (ImageFileBean) model;
|
||||||
//ImageLoader.getInstance().displayImage((String) rowBean.imageURL, iv_icon,option);
|
//ToolImage.getInstance().displayFile(rowBean.imageURL, iv_icon);
|
||||||
ToolImage.getInstance().displayFile(rowBean.imageURL, iv_icon);
|
Glide.with(mContext).load(rowBean.imageURL).crossFade().centerCrop().into(iv_icon);
|
||||||
tv_title.setText(rowBean.title);
|
tv_title.setText(rowBean.displayName);
|
||||||
|
tv_adddate.setText(rowBean.addDate);
|
||||||
|
tv_size.setText(getNetFileSizeDescription(rowBean.size));
|
||||||
|
//视频类型
|
||||||
|
rl_video_area.setVisibility(rowBean.isVideo?View.VISIBLE:View.GONE);
|
||||||
|
tv_video_duration.setText(formatSeconds(rowBean.duration / 1000));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -70,18 +88,106 @@ public class MyGridViewTemplet extends AbsViewTemplet {
|
||||||
try{
|
try{
|
||||||
ImageFileBean rowBean = (ImageFileBean) rowData;
|
ImageFileBean rowBean = (ImageFileBean) rowData;
|
||||||
//ToolToast.showShort(mContext,"点击了"+ rowBean.title);
|
//ToolToast.showShort(mContext,"点击了"+ rowBean.title);
|
||||||
|
if(rowBean.isVideo){
|
||||||
//打开系统的播放器 ACTION_VIEW
|
playVideo(mContext,rowBean.path);
|
||||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
}else{
|
||||||
//得到视频
|
imageBrower(mContext,rowBean.path);
|
||||||
//Environment.getExternalStorageDirectory() 得到Sdcard的根目录、
|
}
|
||||||
Uri uri = Uri.parse(rowBean.path);
|
|
||||||
//加载视频 和 类型
|
|
||||||
intent.setDataAndType(uri, "video/*");
|
|
||||||
mContext.startActivity(intent);
|
|
||||||
}catch (Throwable e){
|
}catch (Throwable e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打开图片查看器
|
||||||
|
*
|
||||||
|
* @param mContext
|
||||||
|
* @param path
|
||||||
|
*/
|
||||||
|
protected void imageBrower(Context mContext,String path) {
|
||||||
|
// //打开系统的查看器
|
||||||
|
// Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||||
|
// Uri uri = Uri.parse(path);
|
||||||
|
// //加载图片
|
||||||
|
// intent.setDataAndType(uri, "image/*");
|
||||||
|
// mContext.startActivity(intent);
|
||||||
|
|
||||||
|
Intent mIntent = new Intent(mContext, PictureViewerActivity.class);
|
||||||
|
ArrayList<PictureBean> dataSource = new ArrayList<PictureBean>();
|
||||||
|
PictureBean image = new PictureBean(PictureBean.FILE_TYPE_SDCARD, path, path);
|
||||||
|
dataSource.add(image);
|
||||||
|
mIntent.putExtra(IBaseConstant.PICTURE_VIEWER_DEFAULT_POSTION, position);
|
||||||
|
mIntent.putExtra(IBaseConstant.PICTURE_VIEWER_DATASOURCE, dataSource);
|
||||||
|
mContext.startActivity(mIntent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打开视频
|
||||||
|
*
|
||||||
|
* @param mContext
|
||||||
|
* @param path
|
||||||
|
*/
|
||||||
|
private void playVideo(Context mContext,String path){
|
||||||
|
//打开系统的播放器 ACTION_VIEW
|
||||||
|
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||||
|
//得到视频
|
||||||
|
//Environment.getExternalStorageDirectory() 得到Sdcard的根目录、
|
||||||
|
Uri uri = Uri.parse(path);
|
||||||
|
//加载视频 和 类型
|
||||||
|
intent.setDataAndType(uri, "video/*");
|
||||||
|
mContext.startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式化时长
|
||||||
|
*
|
||||||
|
* @param seconds
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String formatSeconds(long seconds){
|
||||||
|
String standardTime;
|
||||||
|
if (seconds <= 0){
|
||||||
|
standardTime = "00:00";
|
||||||
|
} else if (seconds < 60) {
|
||||||
|
standardTime = String.format(Locale.getDefault(), "00:%02d", seconds % 60);
|
||||||
|
} else if (seconds < 3600) {
|
||||||
|
standardTime = String.format(Locale.getDefault(), "%02d:%02d", seconds / 60, seconds % 60);
|
||||||
|
} else {
|
||||||
|
standardTime = String.format(Locale.getDefault(), "%02d:%02d:%02d", seconds / 3600, seconds % 3600 / 60, seconds % 60);
|
||||||
|
}
|
||||||
|
return standardTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式化byte
|
||||||
|
*
|
||||||
|
* @param size
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getNetFileSizeDescription(long size) {
|
||||||
|
StringBuffer bytes = new StringBuffer();
|
||||||
|
DecimalFormat format = new DecimalFormat("###.0");
|
||||||
|
if (size >= 1024 * 1024 * 1024) {
|
||||||
|
double i = (size / (1024.0 * 1024.0 * 1024.0));
|
||||||
|
bytes.append(format.format(i)).append("GB");
|
||||||
|
}
|
||||||
|
else if (size >= 1024 * 1024) {
|
||||||
|
double i = (size / (1024.0 * 1024.0));
|
||||||
|
bytes.append(format.format(i)).append("MB");
|
||||||
|
}
|
||||||
|
else if (size >= 1024) {
|
||||||
|
double i = (size / (1024.0));
|
||||||
|
bytes.append(format.format(i)).append("KB");
|
||||||
|
}
|
||||||
|
else if (size < 1024) {
|
||||||
|
if (size <= 0) {
|
||||||
|
bytes.append("0B");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bytes.append((int) size).append("B");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bytes.toString();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 3.8 KiB |
|
@ -10,10 +10,10 @@
|
||||||
android:background="#cccccc"
|
android:background="#cccccc"
|
||||||
android:columnWidth="@dimen/itemSize"
|
android:columnWidth="@dimen/itemSize"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:horizontalSpacing="10dp"
|
android:horizontalSpacing="5dp"
|
||||||
android:numColumns="3"
|
android:numColumns="3"
|
||||||
android:scrollbars="none"
|
android:scrollbars="vertical"
|
||||||
android:stretchMode="columnWidth"
|
android:stretchMode="columnWidth"
|
||||||
android:verticalSpacing="10dp" />
|
android:verticalSpacing="5dp" />
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
|
@ -19,13 +19,75 @@
|
||||||
android:id="@+id/tv_title"
|
android:id="@+id/tv_title"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentBottom="true"
|
android:layout_alignParentTop="true"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:gravity="left|center_vertical"
|
android:gravity="left|center_vertical"
|
||||||
android:padding="10dp"
|
android:padding="4dp"
|
||||||
android:singleLine="false"
|
android:singleLine="false"
|
||||||
android:text="1:00"
|
tools:text="XXXXX.mp4"
|
||||||
android:textColor="@color/anl_white"
|
android:textColor="@color/anl_red"
|
||||||
android:textSize="14sp" />
|
android:textSize="11dp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_adddate"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/tv_title"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:gravity="left|center_vertical"
|
||||||
|
android:padding="4dp"
|
||||||
|
android:singleLine="false"
|
||||||
|
tools:text="2019-08-13 11:22:39"
|
||||||
|
android:textColor="@color/anl_red"
|
||||||
|
android:textSize="11dp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_size"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/tv_adddate"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:gravity="left|center_vertical"
|
||||||
|
android:padding="4dp"
|
||||||
|
android:singleLine="false"
|
||||||
|
android:textColor="@color/anl_red"
|
||||||
|
tools:text="27MB"
|
||||||
|
android:textSize="11dp" />
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 视频相关-->
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/rl_video_area"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:paddingBottom="10dp"
|
||||||
|
android:visibility="visible">
|
||||||
|
|
||||||
|
<!-- 视频图标-->
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/iv_video_icon"
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_marginLeft="10dp"
|
||||||
|
android:background="@null"
|
||||||
|
android:src="@drawable/common_album_video"
|
||||||
|
android:visibility="visible" />
|
||||||
|
|
||||||
|
<!-- 视频时长-->
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_video_duration"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_marginRight="10dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:textColor="@color/anl_red"
|
||||||
|
android:textSize="11dp"
|
||||||
|
tools:text="0:15" />
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
Loading…
Reference in New Issue