Commit 11d4dc87 by 张建升

1、新增開始結束時間選擇控件

parent 24b35f43
...@@ -124,7 +124,6 @@ public class StartEndTimePickerView extends FrameLayout implements View.OnClickL ...@@ -124,7 +124,6 @@ public class StartEndTimePickerView extends FrameLayout implements View.OnClickL
if (viewId == R.id.tv_start_time || viewId == R.id.iv_start_time_triangle) { if (viewId == R.id.tv_start_time || viewId == R.id.iv_start_time_triangle) {
startTriangleView.toggle(); startTriangleView.toggle();
time = tvStartTime.getText().toString(); time = tvStartTime.getText().toString();
endTime.setTime(TimeUtils.DATE_FORMAT_DATE.parse(tvEndTime.getText().toString())); endTime.setTime(TimeUtils.DATE_FORMAT_DATE.parse(tvEndTime.getText().toString()));
} else { } else {
endTriangleView.toggle(); endTriangleView.toggle();
......
...@@ -66,7 +66,7 @@ ext { ...@@ -66,7 +66,7 @@ ext {
"loadsir" : "com.kingja.loadsir:loadsir:1.3.8", "loadsir" : "com.kingja.loadsir:loadsir:1.3.8",
"lottie" : "com.airbnb.android:lottie:3.6.1", "lottie" : "com.airbnb.android:lottie:3.6.1",
"loadingIndicatorView" : "com.wang.avi:library:2.1.3", "loadingIndicatorView" : "com.wang.avi:library:2.1.3",
"viewpager2" : "androidx.viewpager2:viewpager2:1.0.0-alpha03", "viewpager2" : "androidx.viewpager2:viewpager2:1.0.0",
//rx1 //rx1
"rxandroid" : "io.reactivex:rxandroid:1.2.1", "rxandroid" : "io.reactivex:rxandroid:1.2.1",
......
...@@ -75,7 +75,7 @@ dependencies { ...@@ -75,7 +75,7 @@ dependencies {
compileOnly rootProject.ext.dependencies["canary-release"] compileOnly rootProject.ext.dependencies["canary-release"]
compileOnly rootProject.ext.dependencies["canary-release"] compileOnly rootProject.ext.dependencies["canary-release"]
} }
api 'androidx.viewpager2:viewpager2:1.0.0-alpha03' api rootProject.ext.dependencies["viewpager2"]
implementation files('libs\\ecracalib.jar') implementation files('libs\\ecracalib.jar')
testImplementation rootProject.ext.dependencies["junit"] testImplementation rootProject.ext.dependencies["junit"]
debugImplementation rootProject.ext.dependencies["canary-debug"] debugImplementation rootProject.ext.dependencies["canary-debug"]
......
...@@ -68,7 +68,7 @@ dependencies { ...@@ -68,7 +68,7 @@ dependencies {
//test //test
testImplementation 'junit:junit:4.12' testImplementation 'junit:junit:4.12'
api 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0' api 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
// compileOnly "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compileOnly "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
} }
// deploy // deploy
......
package com.gingersoft.gsa.cloud.ui.view;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import com.gingersoft.gsa.cloud.common.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.ui.R;
import com.gingersoft.gsa.cloud.ui.utils.TimePickerUtils;
import java.text.ParseException;
import java.util.Calendar;
public class StartEndTimePickerView extends FrameLayout implements View.OnClickListener {
private TextView tvStartTime;
private TriangleView startTriangleView;
private TextView tvEndTime;
private TriangleView endTriangleView;
private onUpdateTimePicker onUpdateTimePicker;
private int mTextColor;
private float mTextSize;
private float mImgWidth;
private float mImgHeight;
private Drawable mArrowRes;
private boolean showStartTime;
private boolean showEndTime;
public StartEndTimePickerView(@NonNull Context context) {
this(context, null, -1);
}
public StartEndTimePickerView(@NonNull Context context, onUpdateTimePicker onUpdateTimePicker) {
this(context);
this.onUpdateTimePicker = onUpdateTimePicker;
}
public StartEndTimePickerView(@NonNull Context context, @Nullable AttributeSet attrs) {
this(context, attrs, -1);
}
public StartEndTimePickerView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
public void setOnUpdateTimePicker(StartEndTimePickerView.onUpdateTimePicker onUpdateTimePicker) {
this.onUpdateTimePicker = onUpdateTimePicker;
}
private void init(Context context, AttributeSet attrs) {
initTypedArray(context, attrs);
View view = View.inflate(context, R.layout.layout_start_end_time_picker, null);
tvStartTime = view.findViewById(R.id.tv_start_time);
startTriangleView = view.findViewById(R.id.iv_start_time_triangle);
tvEndTime = view.findViewById(R.id.tv_end_time);
endTriangleView = view.findViewById(R.id.iv_end_time_triangle);
tvStartTime.setTextColor(mTextColor);
tvEndTime.setTextColor(mTextColor);
tvStartTime.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
tvEndTime.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
TextView tvInterval = view.findViewById(R.id.tv_time_interval);
tvInterval.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
tvStartTime.setVisibility(showStartTime ? VISIBLE : GONE);
tvEndTime.setVisibility(showEndTime ? VISIBLE : GONE);
if (mArrowRes != null) {
startTriangleView.setImageDrawable(mArrowRes);
endTriangleView.setImageDrawable(mArrowRes);
}
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) startTriangleView.getLayoutParams();
layoutParams.width = (int) mImgWidth;
layoutParams.height = (int) mImgHeight;
startTriangleView.setLayoutParams(layoutParams);
endTriangleView.setLayoutParams(layoutParams);
tvStartTime.setText(TimeUtils.getOldDate(-7));
tvEndTime.setText(TimeUtils.getOldDate(0));
tvStartTime.setOnClickListener(this);
startTriangleView.setOnClickListener(this);
tvEndTime.setOnClickListener(this);
endTriangleView.setOnClickListener(this);
updateTime();
this.addView(view);
}
private void initTypedArray(Context context, AttributeSet attrs) {
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.StartEndTimePickerView);
mTextColor = typedArray.getColor(R.styleable.StartEndTimePickerView_textColor, ContextCompat.getColor(context, R.color.color_18));
mTextSize = typedArray.getDimension(R.styleable.StartEndTimePickerView_textSize, getResources().getDimension(R.dimen.dp_10));
mImgWidth = typedArray.getDimension(R.styleable.StartEndTimePickerView_imgWidth, getResources().getDimension(R.dimen.dp_8));
mImgHeight = typedArray.getDimension(R.styleable.StartEndTimePickerView_imgHeight, getResources().getDimension(R.dimen.dp_5));
mArrowRes = typedArray.getDrawable(R.styleable.StartEndTimePickerView_arrowRes);
showStartTime = typedArray.getBoolean(R.styleable.StartEndTimePickerView_showStartTime, true);
showEndTime = typedArray.getBoolean(R.styleable.StartEndTimePickerView_showEndTime, true);
typedArray.recycle();
}
@Override
public void onClick(View v) {
int viewId = v.getId();
try {
String time;
Calendar startTime = Calendar.getInstance();
startTime.set(Calendar.DAY_OF_YEAR, startTime.getActualMinimum(Calendar.DAY_OF_YEAR));//今年第一天
Calendar endTime = Calendar.getInstance();
if (viewId == R.id.tv_start_time || viewId == R.id.iv_start_time_triangle) {
startTriangleView.toggle();
time = tvStartTime.getText().toString();
endTime.setTime(TimeUtils.DATE_FORMAT_DATE.parse(tvEndTime.getText().toString()));
} else {
endTriangleView.toggle();
time = tvEndTime.getText().toString();
startTime.setTime(TimeUtils.DATE_FORMAT_DATE.parse(tvStartTime.getText().toString()));
}
Calendar cal = Calendar.getInstance();
try {
//設置默認時間為當前的起止時間
cal.setTime(TimeUtils.DATE_FORMAT_DATE.parse(time));
} catch (ParseException e) {
e.printStackTrace();
}
//打開時間選擇器
TimePickerUtils.showReportTimePicker(v.getContext(), startTime, endTime, cal, (date, v1) ->
{
if (viewId == R.id.tv_start_time || viewId == R.id.iv_start_time_triangle) {
tvStartTime.setText(TimeUtils.DATE_FORMAT_DATE.format(date));
} else {
tvEndTime.setText(TimeUtils.DATE_FORMAT_DATE.format(date));
}
updateTime();
}).setOnDismissListener(o -> {
if (startTriangleView.isOpen()) {
startTriangleView.toggle();
} else if (endTriangleView.isOpen()) {
endTriangleView.toggle();
}
});
} catch (ParseException e) {
e.printStackTrace();
}
}
private void updateTime() {
if (onUpdateTimePicker != null) {
onUpdateTimePicker.onUpdateTime(tvStartTime.getText().toString(), tvEndTime.getText().toString());
}
}
public interface onUpdateTimePicker {
void onUpdateTime(String startTime, String endTime);
}
public StartEndTimePickerView setStartTime(String startTime) {
tvStartTime.setText(startTime);
return this;
}
public StartEndTimePickerView setEndTime(String endTime) {
tvEndTime.setText(endTime);
return this;
}
public String getStartTime() {
if (tvStartTime != null) {
return tvStartTime.getText().toString();
}
return TimeUtils.getOldDate(-7);
}
public String getEndTime() {
if (tvEndTime != null) {
return tvEndTime.getText().toString();
}
return TimeUtils.getOldDate(0);
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_start_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#181818"
tools:text="2020-02-14"
android:textSize="@dimen/sp_10" />
<com.gingersoft.gsa.cloud.ui.view.TriangleView
android:id="@+id/iv_start_time_triangle"
android:layout_width="@dimen/dp_10"
android:layout_height="@dimen/dp_5"
android:paddingLeft="@dimen/dp_2"
app:trv_direction="bottom" />
<TextView
android:id="@+id/tv_time_interval"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_7"
android:text="到"
android:textColor="#999"
android:textSize="@dimen/sp_10" />
<TextView
android:id="@+id/tv_end_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_7"
tools:text="2020-02-14"
android:textColor="#181818"
android:textSize="@dimen/sp_10" />
<com.gingersoft.gsa.cloud.ui.view.TriangleView
android:id="@+id/iv_end_time_triangle"
android:layout_width="@dimen/dp_8"
android:layout_height="@dimen/dp_5"
android:layout_marginLeft="@dimen/dp_2"
app:trv_direction="bottom" />
</LinearLayout>
\ No newline at end of file
...@@ -812,4 +812,13 @@ ...@@ -812,4 +812,13 @@
<attr name="sEditTextSize" format="dimension"/> <attr name="sEditTextSize" format="dimension"/>
<attr name="sEditActiveLineColor" format="color" /> <attr name="sEditActiveLineColor" format="color" />
</declare-styleable> </declare-styleable>
<declare-styleable name="StartEndTimePickerView">
<attr name="textColor" format="color" />
<attr name="textSize" format="dimension" />
<attr name="imgWidth" format="dimension"/>
<attr name="imgHeight" format="dimension"/>
<attr name="arrowRes" format="reference" />
<attr name="showStartTime" format="boolean" />
<attr name="showEndTime" format="boolean" />
</declare-styleable>
</resources> </resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment