公会流水统计时间筛选器优化

This commit is contained in:
huangjian
2022-07-18 18:52:52 +08:00
parent 8e469cd22a
commit 2d87c479b4
5 changed files with 159 additions and 62 deletions

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/color_333333" android:state_selected="true" />
<item android:color="@color/color_999999" />
</selector>

View File

@@ -75,7 +75,8 @@ public class ClanIncomeActivity extends BaseMvpActivity<IIncomeStatisticsView, C
};
private boolean mHasInit = false;
private int mCurrentType;
private long mDayFirstTime = System.currentTimeMillis();
private long mDayLastTime = mDayFirstTime;
public static void start(Context context, long id) {
Intent intent = new Intent(context, ClanIncomeActivity.class);
@@ -123,13 +124,12 @@ public class ClanIncomeActivity extends BaseMvpActivity<IIncomeStatisticsView, C
private void initDay() {
ClanIncomePresenter presenter = getMvpPresenter();
presenter.initCurrentDay();
getDayIncomeTotal(presenter.getDayFormat(), presenter.getDayFormat());
getDayIncomeTotal(getDayFormat(mDayFirstTime), getDayFormat(mDayLastTime));
}
private void initIndicator() {
List<String> tagList = new ArrayList<>();
tagList.add("日统计");
tagList.add("日统计");
tagList.add("每周统计");
tagList.add("每月统计");
StatisticsIndicatorAdapter adapter = new StatisticsIndicatorAdapter(tagList, 5);
@@ -159,7 +159,7 @@ public class ClanIncomeActivity extends BaseMvpActivity<IIncomeStatisticsView, C
StatisticsProtocol.HALL_INCOME_WEEKLY_CLICK, "切换每周统计", null);
getWeekIncomeTotal(presenter.getWeekFirstDay(), presenter.getWeekLastDay());
} else if (mCurrentType == TYPE_DAY) {
getDayIncomeTotal(presenter.getDayFormat(), presenter.getDayFormat());
getDayIncomeTotal(getDayFormat(mDayFirstTime), getDayFormat(mDayLastTime));
} else {
getMonthIncomeTotal(presenter.getmStartTimeStr(), presenter.getmEndTimeStr());
}
@@ -183,6 +183,7 @@ public class ClanIncomeActivity extends BaseMvpActivity<IIncomeStatisticsView, C
ClanIncomePresenter presenter = getMvpPresenter();
boolean isWeek = mCurrentType == TYPE_WEEK;
boolean isMonth = mCurrentType == TYPE_MONTH;
boolean isDay = mCurrentType == TYPE_DAY;
TimePickerDialog.Builder builder = new TimePickerDialog.Builder()
.setType(Type.YEAR_MONTH_DAY)
@@ -192,9 +193,12 @@ public class ClanIncomeActivity extends BaseMvpActivity<IIncomeStatisticsView, C
.timetimepicker_default_text_color))
.setWheelItemTextSelectorColor(getResources().getColor(R.color.black))
// 根据上一次选中时间初始化日期控件
.setCurrentMillseconds(isWeek ? presenter.getmWeekChooseDay() : presenter.getmDay())
.setCurrentMillseconds(isDay ? mDayFirstTime : (isWeek ? presenter.getmWeekChooseDay() : presenter.getmDay()))
.setmIsWeek(isWeek)
.setIsMonth(isMonth);
.setIsMonth(isMonth)
.setIsDay(isDay)
.setDayFirstTime(mDayFirstTime)
.setDayLastTime(mDayLastTime);
TimePickerDialog dialog = builder.build();
dialog.setmTimePickerListener(this);
@@ -208,14 +212,14 @@ public class ClanIncomeActivity extends BaseMvpActivity<IIncomeStatisticsView, C
ClanIncomePresenter presenter = getMvpPresenter();
if (mCurrentType == TYPE_DAY) {
presenter.setmDayStr(chooseTime);
getDayIncomeTotal(presenter.getDayFormat(), presenter.getDayFormat());
mDayFirstTime = TimeUtils.getTimeMillis(weekFirstDay, TimeUtils.DATE_FORMAT);
mDayLastTime = TimeUtils.getTimeMillis(weekLastDay, TimeUtils.DATE_FORMAT);
getDayIncomeTotal(weekFirstDay, weekLastDay);
} else if (mCurrentType == TYPE_WEEK) {
presenter.setmWeekChooseDay(chooseTime);
presenter.setWeekFirstDay(weekFirstDay);
presenter.setWeekLastDay(weekLastDay);
getWeekIncomeTotal(weekFirstDay, weekLastDay);
} else {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
@@ -232,9 +236,11 @@ public class ClanIncomeActivity extends BaseMvpActivity<IIncomeStatisticsView, C
private void getDayIncomeTotal(String startTimeStr, String endTimeStr) {
String[] dayArray = startTimeStr.split("-");
String[] endDayArray = endTimeStr.split("-");
tvYear.setText(String.format(getString(R.string.format_year), dayArray[0]));
tvMonthDayEnd.setVisibility(View.GONE);
tvMonthDayStart.setText(String.format(getString(R.string.format_month_day), dayArray[1], dayArray[2]));
tvMonthDayEnd.setVisibility(View.VISIBLE);
tvMonthDayEnd.setText(String.format(getString(R.string.format_month_day), endDayArray[1], endDayArray[2]));
list.get(0).getIncomeTotal(startTimeStr, endTimeStr);
}
@@ -263,6 +269,10 @@ public class ClanIncomeActivity extends BaseMvpActivity<IIncomeStatisticsView, C
tvTotal.setText(getMvpPresenter().setTotal(total));
}
private String getDayFormat(long time) {
return TimeUtils.getDateTimeString(time, TimeUtils.DATE_FORMAT);
}
@Override
protected boolean needSteepStateBar() {
return true;

View File

@@ -23,6 +23,7 @@ import com.jzxiang.pickerview.data.Type;
import com.jzxiang.pickerview.data.WheelCalendar;
import com.jzxiang.pickerview.listener.OnDateSetListener;
import com.yizhuan.erban.R;
import com.yizhuan.xchat_android_library.utils.SingleToastUtil;
import com.yizhuan.xchat_android_library.utils.TimeUtils;
import java.util.Calendar;
@@ -32,24 +33,29 @@ import java.util.Calendar;
*/
public class TimePickerDialog extends DialogFragment implements View.OnClickListener {
PickerConfig mPickerConfig;
RelativeLayout rlWeekGroup;
TextView tvWeekFirstDay;
TextView tvWeekLastDay;
private TimeWheel mTimeWheel;
private long mCurrentMillSeconds;
private long mFirstMs;
private TimePickerListener mTimePickerListener;
private String mWeekFirstDay;
private String mWeekLastDay;
private long mDayFirstTime;
private long mDayLastTime;
private boolean selectDayLastTime;
/**
* 显示周区间
*/
private boolean mIsWeek;
private boolean isMonth;
private boolean isDay;
private static TimePickerDialog newInstance(PickerConfig pickerConfig, long firstMs, boolean isWeek, boolean isMonth) {
private static TimePickerDialog newInstance(PickerConfig pickerConfig, long firstMs, boolean isWeek, boolean isMonth, boolean isDay, long dayFirstTime, long dayLastTime) {
TimePickerDialog timePickerDialog = new TimePickerDialog();
timePickerDialog.initialize(pickerConfig, firstMs, isWeek, isMonth);
timePickerDialog.initialize(pickerConfig, firstMs, isWeek, isMonth, isDay, dayFirstTime, dayLastTime);
return timePickerDialog;
}
@@ -74,11 +80,14 @@ public class TimePickerDialog extends DialogFragment implements View.OnClickList
window.setGravity(Gravity.BOTTOM);
}
private void initialize(PickerConfig pickerConfig, long firstMs, boolean isWeek, boolean isMonth) {
private void initialize(PickerConfig pickerConfig, long firstMs, boolean isWeek, boolean isMonth, boolean isDay, long dayFirstTime, long dayLastTime) {
mPickerConfig = pickerConfig;
mFirstMs = firstMs;
mIsWeek = isWeek;
this.isMonth = isMonth;
this.isDay = isDay;
this.mDayFirstTime = dayFirstTime;
this.mDayLastTime = dayLastTime;
}
@NonNull
@@ -92,10 +101,6 @@ public class TimePickerDialog extends DialogFragment implements View.OnClickList
return dialog;
}
RelativeLayout rlWeekGroup;
TextView tvWeekFirstDay;
TextView tvWeekLastDay;
View initView() {
LayoutInflater inflater = LayoutInflater.from(getContext());
View view = inflater.inflate(R.layout.dialog_custom_time_picker, null);
@@ -112,9 +117,25 @@ public class TimePickerDialog extends DialogFragment implements View.OnClickList
rlWeekGroup = view.findViewById(R.id.rl_week_group);
tvWeekFirstDay = view.findViewById(R.id.tv_week_first_day);
tvWeekLastDay = view.findViewById(R.id.tv_week_last_day);
tvWeekFirstDay.setSelected(true);
tvWeekLastDay.setSelected(mIsWeek);
rlWeekGroup.setVisibility(mIsWeek || isDay ? View.VISIBLE : View.GONE);
rlWeekGroup.setVisibility(mIsWeek ? View.VISIBLE : View.GONE);
if (isDay) {
if (mDayFirstTime != mDayLastTime) {
tvWeekLastDay.setText(TimeUtils.getDateTimeString(mDayLastTime, TimeUtils.DATE_FORMAT));
} else {
tvWeekLastDay.setText("结束日期");
}
tvWeekFirstDay.setOnClickListener(v -> {
tvWeekFirstDay.setSelected(true);
tvWeekLastDay.setSelected(false);
});
tvWeekLastDay.setOnClickListener(v -> {
tvWeekFirstDay.setSelected(false);
tvWeekLastDay.setSelected(true);
});
}
title.setText(mPickerConfig.mTitleString);
title.setTextColor(context.getResources().getColor(R.color.color_333333));
cancel.setText(mPickerConfig.mCancelString);
@@ -147,10 +168,20 @@ public class TimePickerDialog extends DialogFragment implements View.OnClickList
}
private void setWeekView(Calendar calendar) {
long firstDayTime;
if (isDay) {
if (tvWeekFirstDay.isSelected()) {
mDayFirstTime = calendar.getTimeInMillis();
tvWeekFirstDay.setText(TimeUtils.getDateTimeString(mDayFirstTime, TimeUtils.DATE_FORMAT));
} else {
selectDayLastTime = true;
mDayLastTime = calendar.getTimeInMillis();
tvWeekLastDay.setText(TimeUtils.getDateTimeString(mDayLastTime, TimeUtils.DATE_FORMAT));
}
} else {
//获取周几 1-7
int currweekDay = calendar.get(Calendar.DAY_OF_WEEK);
//周一的时间
long firstDayTime;
if (currweekDay == 1) {//周日
firstDayTime = calendar.getTimeInMillis() - (TimeUtils.MILLIS_OF_A_DAY * (7 - currweekDay));
} else {
@@ -167,6 +198,7 @@ public class TimePickerDialog extends DialogFragment implements View.OnClickList
mWeekLastDay = last;
tvWeekLastDay.setText(last);
}
}
@Override
public void onClick(View v) {
@@ -210,8 +242,26 @@ public class TimePickerDialog extends DialogFragment implements View.OnClickList
mCurrentMillSeconds = calendar.getTimeInMillis();
if (mTimePickerListener != null) {
if (isDay) {
if (!selectDayLastTime) {
mDayLastTime = mDayFirstTime;
}
if (mDayFirstTime > mDayLastTime) {
SingleToastUtil.showToast("结束日期不得早于开始日期");
return;
}
if (mDayLastTime - mDayFirstTime > 180 * TimeUtils.MILLIS_OF_A_DAY) {
SingleToastUtil.showToast("开始日期和结束日期相差不得超过6个月");
return;
}
mTimePickerListener.getTime(mCurrentMillSeconds,
TimeUtils.getDateTimeString(mDayFirstTime, TimeUtils.DATE_FORMAT),
TimeUtils.getDateTimeString(mDayLastTime, TimeUtils.DATE_FORMAT));
} else {
mTimePickerListener.getTime(mCurrentMillSeconds, mWeekFirstDay, mWeekLastDay);
}
}
dismiss();
}
@@ -225,6 +275,9 @@ public class TimePickerDialog extends DialogFragment implements View.OnClickList
long firstMs;
boolean mIsWeek;
boolean isMonth;
boolean isDay;
private long mDayFirstTime;
private long mDayLastTime;
public Builder() {
mPickerConfig = new PickerConfig();
@@ -336,8 +389,23 @@ public class TimePickerDialog extends DialogFragment implements View.OnClickList
return this;
}
public Builder setIsDay(boolean isDay) {
this.isDay = isDay;
return this;
}
public Builder setDayFirstTime(long dayFirstTime) {
this.mDayFirstTime = dayFirstTime;
return this;
}
public Builder setDayLastTime(long dayLastTime) {
this.mDayLastTime = dayLastTime;
return this;
}
public TimePickerDialog build() {
return newInstance(mPickerConfig, firstMs, mIsWeek, isMonth);
return newInstance(mPickerConfig, firstMs, mIsWeek, isMonth, isDay, mDayFirstTime, mDayLastTime);
}
}

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:gravity="bottom"
android:orientation="vertical">
@@ -13,39 +13,39 @@
<RelativeLayout
android:id="@+id/rl_week_group"
android:layout_width="match_parent"
android:background="@color/white"
android:layout_height="40dp">
android:layout_height="40dp"
android:background="@color/white">
<TextView
android:id="@+id/tv_week_first_day"
android:layout_centerVertical="true"
android:layout_toStartOf="@+id/tv_utill"
android:layout_marginEnd="@dimen/dp_14"
android:textSize="@dimen/sp_15"
tools:text="2018-01-02"
android:textColor="@color/color_333333"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginEnd="@dimen/dp_14"
android:layout_toStartOf="@+id/tv_utill"
android:textColor="@color/color_selector_333_false_999"
android:textSize="@dimen/sp_15"
tools:text="2018-01-02" />
<TextView
android:id="@+id/tv_utill"
android:text="至"
android:layout_centerInParent="true"
android:textSize="@dimen/sp_15"
android:textColor="@color/color_999999"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="至"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp_15" />
<TextView
android:id="@+id/tv_week_last_day"
android:layout_centerVertical="true"
android:layout_toEndOf="@+id/tv_utill"
android:layout_marginStart="@dimen/dp_14"
android:textSize="@dimen/sp_15"
tools:text="2018-01-08"
android:textColor="@color/color_333333"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/dp_14"
android:layout_toEndOf="@+id/tv_utill"
android:textColor="@color/color_selector_333_false_999"
android:textSize="@dimen/sp_15"
tools:text="2018-01-08" />
</RelativeLayout>

View File

@@ -229,6 +229,18 @@ public class TimeUtils {
return result;
}
public static long getTimeMillis(String time, String format) {
try {
SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.getDefault());
Date date = formatter.parse(time);
return date.getTime();
} catch (Exception ex) {
ex.printStackTrace();
}
return 0;
}
/**
* 将毫秒数转为 MM:ss 的格式
*