android日期分组相册,Android原生Gallery的时间相册自定义分组的实现方法

作者:王挺(ting.wong)

Android原生Gallery中的时间相册,在按时间分组时,会自动平均每个时间相册的照片数量和时间,结果会出现一天的照片出现在多个分组的情况,如下图:

1c37422cca3889337d9fbc6bd89b3d91.png

查阅到时间分组相关的代码如下(Gallery2\src\com\android\gallery3d\data\TimeClustering.java):

@Override

public void run(MediaSet baseSet) {

……

int n = items.size();

long minTime = 0;

long maxTime = 0;

for (int i = 0; i < n; i++) {

long t = items.get(i).dateInMs;

if (t == 0)

continue;

if (minTime == 0) {

minTime = maxTime = t;

} else {

minTime = Math.min(minTime,t);

maxTime = Math.max(maxTime,t);

}

}

setTimeRange(maxTime - minTime, n);

for (int i = 0; i < n; i++) {

compute(items.get(i));

}

compute(null);

……

}

经过如下修改,时间相册分组就可以符合要求了,相关的代码分享如下:

@Override

public void run(MediaSet baseSet) {

……

if ( ATpvConstVariable.ALBUMSET_TIME_USE_OLD )

{

int n = items.size();

long minTime = 0;

long maxTime = 0;

for (int i = 0; i < n; i++) {

long t = items.get(i).dateInMs;

if (t == 0)

continue;

if (minTime == 0) {

minTime = maxTime = t;

} else {

minTime = Math.min(minTime,t);

maxTime = Math.max(maxTime, t);

}

}

setTimeRange(maxTime - minTime, n);

for (int i = 0; i < n; i++) {

compute(items.get(i));

}

compute(null);

}

else

{

computeNew(items);

}

……

}

public void computeNew(ArrayList items)

{

int n = items.size();

if ( n<1 )

{

return;

}

int i=0;

StringstrDataLast="";

for ( i = 0; i < n; i++) {

SmallItemcurrentItem=items.get(i);

long t = currentItem.dateInMs;

if (t == 0)

continue;

StringstrDate=ATpvConstVariable.getDateByDateInMs(t);

if ( strDataLast.isEmpty() ||strDataLast.equalsIgnoreCase(strDate) )

{

mCurrCluster.addItem(currentItem);

}

else

{

mClusters.add(mCurrCluster);

mCurrCluster =

new Cluster();

mCurrCluster.addItem(currentItem);

}

strDataLast=strDate;

}

mClusters.add(mCurrCluster);

}

最终分组后情况如下(按当月每日一个相册,非当月每月一个相册分组):

c266cef9b399ec6e23816e0dff6e2fca.png

注:文中Gallery基于MTK6755的Android 6.0中的Gallery代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值