Android仿iphone时间轴相册
实现效果:
首先写需要用到的图片数据:时间、文件名、路径等
- package com.example.a550211.cd;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- /**
- * Created by xing on 2017/7/4.
- */
- public class ImageTime {
- private long time;
- private String thumbPath;
- private String filePath;
- private String fileName;
- public String getFileName() {
- return fileName;
- }
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
- public String getDate() {
- return new SimpleDateFormat("yyyy年MM月dd日")
- .format(new Date(time*1000L));
- }
- public long getTime() {
- return time;
- }
- public void setTime(long time) {
- this.time = time;
- }
- public String getThumbPath() {
- return thumbPath;
- }
- public void setThumbPath(String thumbPath) {
- this.thumbPath = thumbPath;
- }
- public String getFilePath() {
- return filePath;
- }
- public void setFilePath(String filePath) {
- this.filePath = filePath;
- }
- }
- package com.example.a550211.cd;
- import android.app.LoaderManager;
- import android.content.CursorLoader;
- import android.content.Loader;
- import android.database.Cursor;
- import android.provider.MediaStore;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import com.trustyapp.gridheaders.TrustyGridGridView;
- import java.io.File;
- import java.util.ArrayList;
- public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> {
- private TrustyGridGridView gvImage;
- private ImageAdapter adapter;
- private ArrayList<ImageTime> fileInfo;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initView();
- }
- private void initView() {
- gvImage = (TrustyGridGridView)findViewById(R.id.gv_image);
- adapter = new ImageAdapter(this,fileInfo);
- gvImage.setAdapter(adapter);
- fileInfo = new ArrayList<>();
- getLoaderManager().initLoader(1, null, this);
- }
- @Override
- public Loader<Cursor> onCreateLoader(int id, Bundle args) {
- String[] STORE_IMAGES = {
- MediaStore.Images.Media.DATA,
- MediaStore.Images.Media.DATE_ADDED,
- MediaStore.Images.Thumbnails.DATA
- };
- CursorLoader cursorLoader = new CursorLoader(
- this,
- MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- STORE_IMAGES,
- null,
- null,
- null);
- return cursorLoader;
- }
- @Override
- public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
- if (cursor.moveToNext()){
- int thumbPathIndex = cursor.getColumnIndex(MediaStore.Images.Thumbnails.DATA);
- int timeIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATE_ADDED);
- int pathIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
- do{
- ImageTime fi = new ImageTime();
- String thumbPath = cursor.getString(thumbPathIndex);
- Long date = cursor.getLong(timeIndex);
- String filepath = cursor.getString(pathIndex);
- File f = new File(filepath);
- fi.setTime(date);
- fi.setThumbPath(thumbPath);
- fi.setFilePath(filepath);
- fi.setFileName(f.getName());
- fileInfo.add(fi);
- }while (cursor.moveToNext());
- }
- adapter.setData(fileInfo);
- adapter.notifyDataSetChanged();
- }
- @Override
- public void onLoaderReset(Loader<Cursor> loader) {
- }
- }
- package com.example.a550211.cd;
- import android.content.Context;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.ImageView;
- import android.widget.TextView;
- import com.bumptech.glide.Glide;
- import com.bumptech.glide.signature.MediaStoreSignature;
- import com.trustyapp.gridheaders.TrustyGridSimpleAdapter;
- import java.io.File;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- /**
- * Created by xing on 2017/7/11.
- */
- public class ImageAdapter extends BaseAdapter implements TrustyGridSimpleAdapter {
- private Context mContext;
- private ArrayList<ImageTime> fileInfo;
- public ImageAdapter(Context mContext,ArrayList<ImageTime> fileInfo) {
- this.mContext = mContext;
- this.fileInfo =fileInfo;
- }
- public void setData(ArrayList<ImageTime> fileInfo){
- this.fileInfo = fileInfo;
- }
- @Override
- public int getCount() {
- int count = 0;
- if (fileInfo!=null && fileInfo.size()>0){
- count = fileInfo.size();
- }
- return count;
- }
- @Override
- public Object getItem(int position) {
- return position;
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- class ViewHolder{
- ImageView ivImage;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder viewHolder = null;
- if (convertView==null){
- viewHolder = new ViewHolder();
- convertView = View.inflate(mContext,R.layout.item_image,null);
- viewHolder.ivImage = (ImageView)convertView.findViewById(R.id.iv_image);
- convertView.setTag(viewHolder);
- }else {
- viewHolder = (ViewHolder)convertView.getTag();
- }
- if (fileInfo!=null && fileInfo.size()>0) {
- File file = new File(fileInfo.get(position).getFilePath());
- Glide.with(mContext).load(file).asBitmap().dontAnimate().centerCrop()
- .signature(new MediaStoreSignature("image/jpeg", file.lastModified(), 0))
- .into(viewHolder.ivImage);
- }
- return convertView;
- }
- class HeaderViewHolder {
- public TextView tvTimeHeader;
- }
- @Override
- public View getHeaderView(int position, View convertView, ViewGroup viewGroup) {
- HeaderViewHolder mHeadViewHolder = null;
- if (convertView==null){
- mHeadViewHolder = new HeaderViewHolder();
- convertView = View.inflate(mContext,R.layout.item_time_header,null);
- mHeadViewHolder.tvTimeHeader = (TextView) convertView.findViewById(R.id.tv_time_header);
- convertView.setTag(mHeadViewHolder);
- }else {
- mHeadViewHolder = (HeaderViewHolder)convertView.getTag();
- }
- mHeadViewHolder.tvTimeHeader.setText(fileInfo.get(position).getDate());
- return convertView;
- }
- @Override
- public long getHeaderId(int i) {
- // File file = new File(fileInfo.get(i).getFilePath());
- return getTimeId(fileInfo.get(i).getDate());
- // return getTimeId(strToDateLong(file.lastModified()));
- }
- public long getTimeId(String date) {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
- Date mDate = null;
- try {
- mDate = sdf.parse(date);
- } catch (ParseException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return mDate.getTime();
- }
- public String strToDateLong(long time) {
- Date date = new Date(time);
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
- return sdf.format(date);
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/activity_main"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingBottom="@dimen/activity_vertical_margin"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- tools:context="com.example.a550211.cd.MainActivity">
- <com.trustyapp.gridheaders.TrustyGridGridView
- android:id="@+id/gv_image"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:horizontalSpacing="3dp"
- android:numColumns="4"
- android:padding="3dp"
- android:verticalSpacing="3dp"></com.trustyapp.gridheaders.TrustyGridGridView>
- </RelativeLayout>
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <ImageView
- android:id="@+id/iv_image"
- android:layout_width="104dp"
- android:layout_height="104dp"
- android:layout_centerInParent="true"
- android:scaleType="fitXY"
- />
- </LinearLayout>
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <TextView
- android:id="@+id/tv_time_header"
- android:layout_width="wrap_content"
- android:layout_height="34dp"
- android:layout_marginLeft="17dp"
- android:text="fdsfsdfsdf"
- android:gravity="center"
- android:textColor="#000000"
- android:textSize="15sp" />
- </LinearLayout>
需要使用到的权限:
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
相关推荐
- android仿漫画源码、抽奖转盘、Google相册、动画源码等
- Android:仿QQ照片选择器(按相册分类显示,多选添加)
- android 仿Iphone底部 tab效果
- android Gallery 仿iPhone 图片滑动
- android仿iphone的地区选择
- Android仿iphone时间轴相册
- android UI进阶之仿iphone的tab效果(二)
- android UI进阶之仿iphone的tab效果(二)
- Android如何自定义view仿淘宝快递物流信息时间轴
- Android如何实现仿iPhone日期时间选择器
- facebook 动态内容_如何查看和批准Facebook时间轴上显示的内容
- 概率论与数理统计第二章 随机变量及其分布 学习总结