Skip to content

Commit a8ea12e

Browse files
committed
“1.优化车型车长选择器2-新增承运商类型选择器”
1 parent 43c1a95 commit a8ea12e

14 files changed

Lines changed: 302 additions & 24 deletions

File tree

app/src/main/java/com/tick/conditiondialogdemo/MainActivity.java

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,43 @@
55
import android.widget.Button;
66
import android.widget.TextView;
77

8-
import com.tick.conditiondialog.VehicleCdSelector;
9-
import com.tick.conditiondialog.VehicleCondition;
10-
import com.tick.conditiondialog.VehicleConditionSelectListener;
11-
import com.tick.conditiondialog.VehicleMeter;
12-
import com.tick.conditiondialog.VehicleType;
8+
import com.tick.conditiondialog.carrier.CarrierType;
9+
import com.tick.conditiondialog.carrier.CarrierTypeCdSelector;
10+
import com.tick.conditiondialog.carrier.CarrierTypeSelectListener;
11+
import com.tick.conditiondialog.vehicle.VehicleCdSelector;
12+
import com.tick.conditiondialog.vehicle.VehicleCondition;
13+
import com.tick.conditiondialog.vehicle.VehicleConditionSelectListener;
14+
import com.tick.conditiondialog.vehicle.VehicleMeter;
15+
import com.tick.conditiondialog.vehicle.VehicleType;
1316

1417
import java.util.ArrayList;
18+
import java.util.List;
1519

16-
public class MainActivity extends AppCompatActivity implements VehicleConditionSelectListener {
20+
public class MainActivity extends AppCompatActivity implements VehicleConditionSelectListener,
21+
CarrierTypeSelectListener {
1722

18-
private Button mButton;
23+
private Button mVehicleButton;
24+
private Button mCarrierTypeButton;
1925
private TextView mTextView;
2026
private VehicleCdSelector mVehicleCdSelector;
27+
private CarrierTypeCdSelector mTypeCdSelector;
2128

2229
@Override
2330
protected void onCreate(Bundle savedInstanceState) {
2431
super.onCreate(savedInstanceState);
2532
setContentView(R.layout.activity_main);
33+
2634
mVehicleCdSelector = new VehicleCdSelector(getApplicationContext(), mock(), this);
2735
mVehicleCdSelector.setAnimationStyle(R.style.popwin_anim_style);
36+
37+
mTypeCdSelector = new CarrierTypeCdSelector(getApplicationContext(), mockCarrierType(), this);
38+
mTypeCdSelector.setAnimationStyle(R.style.popwin_anim_style);
39+
2840
mTextView = findViewById(R.id.tv_content);
29-
mButton = findViewById(R.id.button);
30-
mButton.setOnClickListener(v -> mVehicleCdSelector.show(v));
41+
mVehicleButton = findViewById(R.id.btVehicel);
42+
mVehicleButton.setOnClickListener(v -> mVehicleCdSelector.show(v));
43+
mCarrierTypeButton = findViewById(R.id.btCarrierType);
44+
mCarrierTypeButton.setOnClickListener(v -> mTypeCdSelector.show(v));
3145
}
3246

3347
public String getContent(VehicleCondition condition) {
@@ -70,8 +84,30 @@ public VehicleCondition mock() {
7084
return vehicleCondition;
7185
}
7286

87+
public List<CarrierType> mockCarrierType() {
88+
ArrayList<CarrierType> types = new ArrayList<>();
89+
types.add(new CarrierType("运输公司"));
90+
types.add(new CarrierType("车队"));
91+
types.add(new CarrierType("车老板"));
92+
types.add(new CarrierType("信息部"));
93+
types.add(new CarrierType("专线"));
94+
return types;
95+
}
96+
7397
@Override
7498
public void onSure(VehicleCondition vehicleCondition) {
7599
mTextView.setText(getContent(vehicleCondition));
76100
}
101+
102+
@Override
103+
public void onSure(List<CarrierType> carrierTypes) {
104+
StringBuilder result = new StringBuilder();
105+
for (int i = 0; i < carrierTypes.size(); i++) {
106+
result.append(carrierTypes.get(i).getValue());
107+
if (i != carrierTypes.size() - 1) {
108+
result.append(",");
109+
}
110+
}
111+
mTextView.setText(result.toString());
112+
}
77113
}

app/src/main/res/layout/activity_main.xml

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,30 @@
88
tools:context="com.tick.conditiondialogdemo.MainActivity">
99

1010
<Button
11-
android:id="@+id/button"
11+
android:id="@+id/btVehicel"
1212
android:layout_width="0dp"
1313
android:layout_height="wrap_content"
14-
android:text="显示"
14+
android:layout_marginBottom="328dp"
15+
android:layout_marginTop="8dp"
16+
android:text="车型选择器"
17+
app:layout_constraintBottom_toBottomOf="parent"
18+
app:layout_constraintHorizontal_bias="0.0"
19+
app:layout_constraintLeft_toLeftOf="parent"
20+
app:layout_constraintRight_toRightOf="parent"
21+
app:layout_constraintTop_toBottomOf="@+id/btCarrierType"
22+
app:layout_constraintVertical_bias="0.104" />
23+
24+
<Button
25+
android:id="@+id/btCarrierType"
26+
android:layout_width="0dp"
27+
android:layout_height="wrap_content"
28+
android:text="承运商类型选择器"
1529
app:layout_constraintBottom_toBottomOf="parent"
1630
app:layout_constraintHorizontal_bias="0.0"
1731
app:layout_constraintLeft_toLeftOf="parent"
1832
app:layout_constraintRight_toRightOf="parent"
1933
app:layout_constraintTop_toTopOf="parent"
20-
app:layout_constraintVertical_bias="0.25"/>
34+
app:layout_constraintVertical_bias="0.196" />
2135

2236
<TextView
2337
android:id="@+id/tv_content"
@@ -28,7 +42,7 @@
2842
android:layout_marginStart="8dp"
2943
android:layout_marginTop="8dp"
3044
android:text="TextView"
31-
app:layout_constraintBottom_toTopOf="@+id/button"
45+
app:layout_constraintBottom_toTopOf="@+id/btCarrierType"
3246
app:layout_constraintEnd_toEndOf="parent"
3347
app:layout_constraintStart_toStartOf="parent"
3448
app:layout_constraintTop_toTopOf="parent"/>

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ buildscript {
77
jcenter()
88
}
99
dependencies {
10-
classpath 'com.android.tools.build:gradle:3.0.0'
10+
classpath 'com.android.tools.build:gradle:3.0.1'
1111

1212

1313
// NOTE: Do not place your application dependencies here; they belong
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.tick.conditiondialog.carrier;
2+
3+
import com.tick.conditiondialog.ConditionEntity;
4+
5+
/**
6+
* 承运商类型信息实体
7+
* Created by wangcheng on 2017/12/11.
8+
*/
9+
10+
public class CarrierType extends ConditionEntity implements Cloneable{
11+
12+
private String carrierType;
13+
14+
public CarrierType(String carrierType) {
15+
this.carrierType = carrierType;
16+
}
17+
18+
public CarrierType() {
19+
}
20+
21+
public String getCarrierType() {
22+
return carrierType;
23+
}
24+
25+
public void setCarrierType(String carrierType) {
26+
this.carrierType = carrierType;
27+
}
28+
29+
@Override
30+
public String getValue() {
31+
return getCarrierType();
32+
}
33+
34+
@Override
35+
protected CarrierType clone() throws CloneNotSupportedException {
36+
CarrierType carrierType = null;
37+
try {
38+
carrierType = (CarrierType) super.clone();
39+
} catch (CloneNotSupportedException e) {
40+
e.printStackTrace();
41+
}
42+
return carrierType;
43+
}
44+
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package com.tick.conditiondialog.carrier;
2+
3+
import android.content.Context;
4+
import android.support.v4.content.ContextCompat;
5+
import android.util.DisplayMetrics;
6+
import android.view.Gravity;
7+
import android.view.LayoutInflater;
8+
import android.view.View;
9+
import android.widget.GridView;
10+
import android.widget.PopupWindow;
11+
import android.widget.TextView;
12+
13+
import com.tick.conditiondialog.ConditionDialogAdapter;
14+
import com.tick.conditiondialog.R;
15+
import com.tick.conditiondialog.ViewUtil;
16+
import com.tick.conditiondialog.vehicle.VehicleCondition;
17+
import com.tick.conditiondialog.vehicle.VehicleConditionSelectListener;
18+
import com.tick.conditiondialog.vehicle.VehicleMeter;
19+
import com.tick.conditiondialog.vehicle.VehicleType;
20+
21+
import java.util.ArrayList;
22+
import java.util.List;
23+
24+
/**
25+
* 承运商类型条件选择器
26+
* Created by wangcheng on 2017/11/13.
27+
*/
28+
29+
public class CarrierTypeCdSelector extends PopupWindow {
30+
private CarrierTypeSelectListener mListener;
31+
private ConditionDialogAdapter<CarrierType> mTypeAdapter;
32+
private View mTop;
33+
34+
public CarrierTypeCdSelector(Context context, List<CarrierType> carrierTypes, CarrierTypeSelectListener listener) {
35+
mListener = listener;
36+
try {
37+
if (carrierTypes == null) {
38+
return;
39+
}
40+
ArrayList<CarrierType> list = new ArrayList<>();
41+
for (CarrierType carrierType : carrierTypes) {
42+
list.add(carrierType.clone());
43+
}
44+
View container = LayoutInflater.from(context).inflate(R.layout.carrier_type_condition_popwindow_layout,
45+
null, false);
46+
mTop = container.findViewById(R.id.v_top);
47+
TextView title = container.findViewById(R.id.tv_title);
48+
TextView tvCancel = container.findViewById(R.id.tv_cancel);
49+
TextView tvSure = container.findViewById(R.id.tv_sure);
50+
GridView meterGridView = container.findViewById(R.id.gv_carrier_type);
51+
mTypeAdapter = new ConditionDialogAdapter<>(context, list, ConditionDialogAdapter.TYPE_MULTIPLY);
52+
meterGridView.setAdapter(mTypeAdapter);
53+
meterGridView.setOnItemClickListener((parent, view, position, id) -> mTypeAdapter.onCheckItemClick
54+
(position));
55+
tvCancel.setOnClickListener(v -> hide());
56+
tvSure.setOnClickListener(v -> {
57+
if (mListener != null) {
58+
List<CarrierType> results = new ArrayList<>();
59+
try {
60+
List<CarrierType> carrierTypeList = mTypeAdapter.getSelectChilds();
61+
if (carrierTypeList != null) {
62+
for (CarrierType carrierType : carrierTypeList) {
63+
results.add(carrierType.clone());
64+
}
65+
}
66+
} catch (CloneNotSupportedException e) {
67+
e.printStackTrace();
68+
}
69+
mListener.onSure(results);
70+
}
71+
hide();
72+
});
73+
//去除点击时的背景色。
74+
title.setHighlightColor(ContextCompat.getColor(context, android.R.color.transparent));
75+
DisplayMetrics metrics = ViewUtil.getDisplayMetrics(context);
76+
setWidth(metrics.widthPixels);
77+
setHeight(metrics.heightPixels);
78+
setContentView(container);
79+
setFocusable(true);
80+
} catch (CloneNotSupportedException e) {
81+
e.printStackTrace();
82+
}
83+
}
84+
85+
public void show(View v) {
86+
showAtLocation(v, Gravity.TOP, 0, 0);
87+
mTop.animate().alpha(1f).setDuration(100).setStartDelay(600);
88+
}
89+
90+
public void hide() {
91+
mTop.setAlpha(0f);
92+
mTop.postDelayed(this::dismiss, 10);
93+
}
94+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.tick.conditiondialog.carrier;
2+
3+
import java.util.List;
4+
5+
public interface CarrierTypeSelectListener {
6+
void onSure(List<CarrierType> carrierTypes);
7+
}

conditiondialog/src/main/java/com/tick/conditiondialog/VehicleCdSelector.java renamed to conditiondialog/src/main/java/com/tick/conditiondialog/vehicle/VehicleCdSelector.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.tick.conditiondialog;
1+
package com.tick.conditiondialog.vehicle;
22

33
import android.content.Context;
44
import android.support.v4.content.ContextCompat;
@@ -10,6 +10,10 @@
1010
import android.widget.PopupWindow;
1111
import android.widget.TextView;
1212

13+
import com.tick.conditiondialog.ConditionDialogAdapter;
14+
import com.tick.conditiondialog.R;
15+
import com.tick.conditiondialog.ViewUtil;
16+
1317
/**
1418
* 车辆条件选择器
1519
* Created by wangcheng on 2017/11/13.
@@ -21,7 +25,8 @@ public class VehicleCdSelector extends PopupWindow {
2125
private ConditionDialogAdapter<VehicleType> mTypeAdapter;
2226
private View mTop;
2327

24-
public VehicleCdSelector(Context context, VehicleCondition vehicleCondition, VehicleConditionSelectListener listener) {
28+
public VehicleCdSelector(Context context, VehicleCondition vehicleCondition, VehicleConditionSelectListener
29+
listener) {
2530
mListener = listener;
2631
VehicleCondition condition = vehicleCondition.cloneCondition();
2732
View container = LayoutInflater.from(context).inflate(R.layout.vehicel_condition_popwindow_layout, null, false);
@@ -36,7 +41,8 @@ public VehicleCdSelector(Context context, VehicleCondition vehicleCondition, Veh
3641
meterGridView.setOnItemClickListener((parent, view, position, id) -> mMeterAdapter.onCheckItemClick(position));
3742

3843
GridView typeGridView = container.findViewById(R.id.gv_vehicle_type);
39-
mTypeAdapter = new ConditionDialogAdapter<>(context, condition.getVehicleTypes(), ConditionDialogAdapter.TYPE_MULTIPLY);
44+
mTypeAdapter = new ConditionDialogAdapter<>(context, condition.getVehicleTypes(), ConditionDialogAdapter
45+
.TYPE_MULTIPLY);
4046
typeGridView.setAdapter(mTypeAdapter);
4147
typeGridView.setOnItemClickListener(((parent, view, position, id) -> mTypeAdapter.onCheckItemClick(position)));
4248

@@ -54,7 +60,7 @@ public VehicleCdSelector(Context context, VehicleCondition vehicleCondition, Veh
5460
title.setHighlightColor(ContextCompat.getColor(context, android.R.color.transparent));
5561
DisplayMetrics metrics = ViewUtil.getDisplayMetrics(context);
5662
setWidth(metrics.widthPixels);
57-
setHeight(metrics.heightPixels);
63+
setHeight(metrics.heightPixels - ViewUtil.getStateBarHeight(context));
5864
setContentView(container);
5965
setFocusable(true);
6066
}

conditiondialog/src/main/java/com/tick/conditiondialog/VehicleCondition.java renamed to conditiondialog/src/main/java/com/tick/conditiondialog/vehicle/VehicleCondition.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.tick.conditiondialog;
1+
package com.tick.conditiondialog.vehicle;
22

33
import java.util.ArrayList;
44

conditiondialog/src/main/java/com/tick/conditiondialog/VehicleConditionSelectListener.java renamed to conditiondialog/src/main/java/com/tick/conditiondialog/vehicle/VehicleConditionSelectListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.tick.conditiondialog;
1+
package com.tick.conditiondialog.vehicle;
22

33
public interface VehicleConditionSelectListener {
44
void onSure(VehicleCondition vehicleCondition);

conditiondialog/src/main/java/com/tick/conditiondialog/VehicleMeter.java renamed to conditiondialog/src/main/java/com/tick/conditiondialog/vehicle/VehicleMeter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package com.tick.conditiondialog;
1+
package com.tick.conditiondialog.vehicle;
2+
3+
import com.tick.conditiondialog.ConditionEntity;
24

35
/**
46
* 车长实体类

0 commit comments

Comments
 (0)