最近项目需要写了一个图库的功能,主要的view是一个StickyGridHeadersGridView,继承于GridView,主要功能是
1.按日期条目显示指定目录下的图片和视频
2.单选,条目选择,全选功能
3.删除功能
4.查看图片,播放视频(调用系统api)
5.图片和视频计数;
话不多说,直接上图:
图片和视频加载主要用的Glide; 日期条目如果是当年不显示年份,
主activity 代码GalleryActivity :
package com.example.stickyheadergridview;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.stickyheadergridview.RefreshableView.PullToRefreshListener;
public class GalleryActivity extends Activity implements CallBackInterface, View.OnClickListener {
private ProgressDialog mProgressDialog;
private GridView mGridView;
private List<GridItem> mGirdList = new ArrayList<GridItem>();
private static int section = 1;
private Map<String, Integer> sectionMap = new HashMap<String, Integer>();
StickyGridAdapter mStickyGridAdapter;
TextView mVedioImageNum, mCheckNum;
int mImageSize, mVedioSize;
LinearLayout mTitleView, mEditView, mDeleteView, mDeleteCheck;
ImageView mExitEdit, mCheckAll, mCheckAllBg;
ImageView mBack;
RefreshableView mRefreshableView;
private Boolean mCheckALLState = false;
private boolean mReLoading = false;
private List<GridItem> deleteList = new ArrayList<GridItem>();
final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0x01:
mProgressDialog.dismiss();
mStickyGridAdapter.list = mGirdList;
mStickyGridAdapter.notifyDataSetChanged();
updateImageVedioSum();
mVedioImageNum.setText(String.format(getString(R.string.image_vedio_num), mImageSize, mVedioSize));
break;
case 0x02:
mProgressDialog.dismiss();
mStickyGridAdapter.notifyDataSetChanged();
updateImageVedioSum();
handleExit();
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gallery_activity_main);
Window window =getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().setStatusBarColor(Color.TRANSPARENT);
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
startThread();
findView();
mStickyGridAdapter = new StickyGridAdapter(GalleryActivity.this, mGirdList, mGridView, this);
mGridView.setAdapter(mStickyGridAdapter);
setClickListener();
}
@Override
protected void onResume() {
super.onResume();
if (mReLoading == true) {
startThread();