公会流水统计时间筛选器优化
This commit is contained in:
7
app/src/main/res/color/color_selector_333_false_999.xml
Normal file
7
app/src/main/res/color/color_selector_333_false_999.xml
Normal 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>
|
@@ -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;
|
||||
|
@@ -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,25 +168,36 @@ public class TimePickerDialog extends DialogFragment implements View.OnClickList
|
||||
}
|
||||
|
||||
private void setWeekView(Calendar calendar) {
|
||||
//获取周几 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));
|
||||
|
||||
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 {
|
||||
firstDayTime = calendar.getTimeInMillis() - (TimeUtils.MILLIS_OF_A_DAY * (currweekDay - 2));
|
||||
//获取周几 1-7
|
||||
int currweekDay = calendar.get(Calendar.DAY_OF_WEEK);
|
||||
if (currweekDay == 1) {//周日
|
||||
firstDayTime = calendar.getTimeInMillis() - (TimeUtils.MILLIS_OF_A_DAY * (7 - currweekDay));
|
||||
} else {
|
||||
firstDayTime = calendar.getTimeInMillis() - (TimeUtils.MILLIS_OF_A_DAY * (currweekDay - 2));
|
||||
}
|
||||
|
||||
String first = TimeUtils.getDateTimeString(firstDayTime, TimeUtils.DATE_FORMAT);
|
||||
mWeekFirstDay = first;
|
||||
tvWeekFirstDay.setText(first);
|
||||
|
||||
//周日
|
||||
long lastDayTime = firstDayTime + (TimeUtils.MILLIS_OF_A_DAY * 6);
|
||||
String last = TimeUtils.getDateTimeString(lastDayTime, TimeUtils.DATE_FORMAT);
|
||||
mWeekLastDay = last;
|
||||
tvWeekLastDay.setText(last);
|
||||
}
|
||||
|
||||
String first = TimeUtils.getDateTimeString(firstDayTime, TimeUtils.DATE_FORMAT);
|
||||
mWeekFirstDay = first;
|
||||
tvWeekFirstDay.setText(first);
|
||||
|
||||
//周日
|
||||
long lastDayTime = firstDayTime + (TimeUtils.MILLIS_OF_A_DAY * 6);
|
||||
String last = TimeUtils.getDateTimeString(lastDayTime, TimeUtils.DATE_FORMAT);
|
||||
mWeekLastDay = last;
|
||||
tvWeekLastDay.setText(last);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -210,7 +242,25 @@ public class TimePickerDialog extends DialogFragment implements View.OnClickList
|
||||
mCurrentMillSeconds = calendar.getTimeInMillis();
|
||||
|
||||
if (mTimePickerListener != null) {
|
||||
mTimePickerListener.getTime(mCurrentMillSeconds, mWeekFirstDay, mWeekLastDay);
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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>
|
||||
|
||||
|
||||
|
@@ -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 的格式
|
||||
*
|
||||
|
Reference in New Issue
Block a user