diff --git a/app/build.gradle b/app/build.gradle
index d0a723c..08c37f9 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -15,8 +15,8 @@ android {
applicationId "com.uiuios.aios"
minSdkVersion 24
targetSdkVersion 29
- versionCode 36
- versionName "4.5"
+ versionCode 37
+ versionName "4.6"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 20df242..6b776a1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -201,6 +201,11 @@
android:name=".activity.OrderListActivity"
android:launchMode="singleTask"
android:screenOrientation="userPortrait" />
+
+
>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getOrderExpress", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse expressDataBaseResponse) {
+ Log.e("getOrderExpress", "onNext: " + expressDataBaseResponse);
+ if (expressDataBaseResponse.code == 200) {
+ ExpressData expressData = expressDataBaseResponse.data;
+ if (expressData.isSuccess()) {
+ LogisticsTrace logisticsTrace = expressData.getLogisticsTrace();
+ mBinding.tvExpressNo.setText(logisticsTrace.getMailNo());
+ List logisticsTraceDetaList = logisticsTrace.getLogisticsTraceDetailList();
+ for (LogisticsTraceDeta logisticsTraceDeta : logisticsTraceDetaList) {
+ View view = LayoutInflater.from(ExpressActivity.this).inflate(R.layout.item_timeline, mBinding.timelineLayout, false);
+ ((TextView) view.findViewById(R.id.tv_action)).setText(logisticsTraceDeta.getDesc());
+ ((TextView) view.findViewById(R.id.tv_action_time)).setText(TimeUtils.transferLongToDate(logisticsTraceDeta.getTime()));
+ ((TextView) view.findViewById(R.id.tv_action_status)).setText(logisticsTraceDeta.getAreaName());
+ mBinding.timelineLayout.addView(view);
+ }
+ mBinding.timelineLayout.setVisibility(View.VISIBLE);
+ mBinding.clNodata.setVisibility(View.GONE);
+ }else {
+ mBinding.timelineLayout.setVisibility(View.GONE);
+ mBinding.clNodata.setVisibility(View.VISIBLE);
+ }
+ } else {
+ mBinding.timelineLayout.setVisibility(View.GONE);
+ mBinding.clNodata.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getOrderExpress", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getOrderExpress", "onComplete: ");
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/InformationActivity.java b/app/src/main/java/com/uiuios/aios/activity/InformationActivity.java
index 24092f6..fa18bf4 100644
--- a/app/src/main/java/com/uiuios/aios/activity/InformationActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/InformationActivity.java
@@ -38,10 +38,11 @@ import io.reactivex.rxjava3.disposables.Disposable;
public class InformationActivity extends DataBindingActivity {
private static final String TAG = InformationActivity.class.getSimpleName();
+
@BindView(R.id.tabLayout)
TabLayout tabLayout;
- @BindView(R.id.root)
- ConstraintLayout root;
+ @BindView(R.id.cl_bar)
+ ConstraintLayout cl_bar;
@BindView(R.id.rv_video)
RecyclerView rv_video;
@BindView(R.id.cl_nodata)
@@ -60,7 +61,7 @@ public class InformationActivity extends DataBindingActivity {
.transparent()
.apply();
- UltimateBarX.addStatusBarTopPadding(tabLayout);
+ UltimateBarX.addStatusBarTopPadding(cl_bar);
mInformationAdapter = new InformationAdapter();
LinearLayoutManager linearLayoutManager1 = new LinearLayoutManager(this);
diff --git a/app/src/main/java/com/uiuios/aios/activity/OrderListActivity.java b/app/src/main/java/com/uiuios/aios/activity/OrderListActivity.java
index 46503a5..e83a86e 100644
--- a/app/src/main/java/com/uiuios/aios/activity/OrderListActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/OrderListActivity.java
@@ -4,6 +4,7 @@ import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.util.Log;
+import android.view.View;
import com.google.android.material.tabs.TabLayout;
import com.trello.rxlifecycle4.RxLifecycle;
@@ -81,6 +82,12 @@ public class OrderListActivity extends BaseDataBindingActivity {
Log.e(TAG, "onTabReselected: " + tab.getText());
}
});
+ mBinding.ivExit.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
}
/**
@@ -117,14 +124,22 @@ public class OrderListActivity extends BaseDataBindingActivity {
OrderIndexData orderIndexData = baseResponse.data;
List orderIndexBeanList = orderIndexData.getData();
mOrderAdapter.setOrderIndexBeans(orderIndexBeanList);
- }else {
+ mBinding.rvOrder.setVisibility(View.VISIBLE);
+ mBinding.clNodata.setVisibility(View.GONE);
+ } else {
mOrderAdapter.setOrderIndexBeans(null);
+ mBinding.rvOrder.setVisibility(View.GONE);
+ mBinding.clNodata.setVisibility(View.VISIBLE);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getAllOrderListObserver", "onError: " + e.getMessage());
+ mOrderAdapter.setOrderIndexBeans(null);
+ mBinding.rvOrder.setVisibility(View.GONE);
+ mBinding.clNodata.setVisibility(View.VISIBLE);
+ onComplete();
}
@Override
diff --git a/app/src/main/java/com/uiuios/aios/adapter/InformationAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/InformationAdapter.java
index 76c315d..21a8cd5 100644
--- a/app/src/main/java/com/uiuios/aios/adapter/InformationAdapter.java
+++ b/app/src/main/java/com/uiuios/aios/adapter/InformationAdapter.java
@@ -42,7 +42,7 @@ public class InformationAdapter extends RecyclerView.Adapter
holder.tv_unit_price.setText("¥" + orderGoods.getBuy_price());
holder.tv_amount.setText(String.valueOf(orderIndexBean.getGoods_total()));
holder.tv_paid.setText("实付:¥" + orderIndexBean.getPrice_total() + "元");
+ String latest_transport = orderIndexBean.getLatest_transport();
+ if (TextUtils.isEmpty(latest_transport)) {
+ holder.tv_express_info.setText("暂无物流信息");
+ } else {
+ holder.tv_express_info.setText(latest_transport);
+ }
+ holder.tv_express.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(mContext, ExpressActivity.class);
+ intent.putExtra("order_sn",orderIndexBean.getOrder_sn());
+ intent.putExtra("order_id",orderIndexBean.getId());
+ mContext.startActivity(intent);
+ }
+ });
}
@Override
@@ -71,7 +88,7 @@ public class OrderAdapter extends RecyclerView.Adapter
}
class OrderHolder extends RecyclerView.ViewHolder {
- TextView tv_statu, tv_title, tv_unit_price, tv_amount, tv_paid, tv_express;
+ TextView tv_statu, tv_title, tv_unit_price, tv_amount, tv_paid, tv_express, tv_express_info;
ImageView iv_goods;
public OrderHolder(@NonNull View itemView) {
@@ -83,6 +100,7 @@ public class OrderAdapter extends RecyclerView.Adapter
tv_paid = itemView.findViewById(R.id.tv_paid);
tv_express = itemView.findViewById(R.id.tv_express);
iv_goods = itemView.findViewById(R.id.iv_goods);
+ tv_express_info = itemView.findViewById(R.id.tv_express_info);
}
}
diff --git a/app/src/main/java/com/uiuios/aios/bean/ExpressData.java b/app/src/main/java/com/uiuios/aios/bean/ExpressData.java
new file mode 100644
index 0000000..4daadfb
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/bean/ExpressData.java
@@ -0,0 +1,44 @@
+package com.uiuios.aios.bean;
+
+import java.io.Serializable;
+
+public class ExpressData implements Serializable {
+ private static final long serialVersionUID = 6282718995656979667L;
+
+ String traceId;
+ String trace_id;
+ boolean success;
+ LogisticsTrace logisticsTrace;
+
+ public String getTraceId() {
+ return traceId;
+ }
+
+ public void setTraceId(String traceId) {
+ this.traceId = traceId;
+ }
+
+ public String getTrace_id() {
+ return trace_id;
+ }
+
+ public void setTrace_id(String trace_id) {
+ this.trace_id = trace_id;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public LogisticsTrace getLogisticsTrace() {
+ return logisticsTrace;
+ }
+
+ public void setLogisticsTrace(LogisticsTrace logisticsTrace) {
+ this.logisticsTrace = logisticsTrace;
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/bean/LogisticsTrace.java b/app/src/main/java/com/uiuios/aios/bean/LogisticsTrace.java
new file mode 100644
index 0000000..49b3546
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/bean/LogisticsTrace.java
@@ -0,0 +1,99 @@
+package com.uiuios.aios.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class LogisticsTrace implements Serializable {
+ private static final long serialVersionUID = 3064293483233992595L;
+
+ String theLastTime;
+ String cpCode;
+ String cpUrl;
+ String logisticsStatusDesc;
+ List logisticsTraceDetailList;
+ String mailNo;
+ String theLastMessage;
+ String cpMobile;
+ String logisticsCompanyName;
+ String logisticsStatus;
+
+ public String getTheLastTime() {
+ return theLastTime;
+ }
+
+ public void setTheLastTime(String theLastTime) {
+ this.theLastTime = theLastTime;
+ }
+
+ public String getCpCode() {
+ return cpCode;
+ }
+
+ public void setCpCode(String cpCode) {
+ this.cpCode = cpCode;
+ }
+
+ public String getCpUrl() {
+ return cpUrl;
+ }
+
+ public void setCpUrl(String cpUrl) {
+ this.cpUrl = cpUrl;
+ }
+
+ public String getLogisticsStatusDesc() {
+ return logisticsStatusDesc;
+ }
+
+ public void setLogisticsStatusDesc(String logisticsStatusDesc) {
+ this.logisticsStatusDesc = logisticsStatusDesc;
+ }
+
+ public List getLogisticsTraceDetailList() {
+ return logisticsTraceDetailList;
+ }
+
+ public void setLogisticsTraceDetailList(List logisticsTraceDetailList) {
+ this.logisticsTraceDetailList = logisticsTraceDetailList;
+ }
+
+ public String getMailNo() {
+ return mailNo;
+ }
+
+ public void setMailNo(String mailNo) {
+ this.mailNo = mailNo;
+ }
+
+ public String getTheLastMessage() {
+ return theLastMessage;
+ }
+
+ public void setTheLastMessage(String theLastMessage) {
+ this.theLastMessage = theLastMessage;
+ }
+
+ public String getCpMobile() {
+ return cpMobile;
+ }
+
+ public void setCpMobile(String cpMobile) {
+ this.cpMobile = cpMobile;
+ }
+
+ public String getLogisticsCompanyName() {
+ return logisticsCompanyName;
+ }
+
+ public void setLogisticsCompanyName(String logisticsCompanyName) {
+ this.logisticsCompanyName = logisticsCompanyName;
+ }
+
+ public String getLogisticsStatus() {
+ return logisticsStatus;
+ }
+
+ public void setLogisticsStatus(String logisticsStatus) {
+ this.logisticsStatus = logisticsStatus;
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/bean/LogisticsTraceDeta.java b/app/src/main/java/com/uiuios/aios/bean/LogisticsTraceDeta.java
new file mode 100644
index 0000000..d49d90e
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/bean/LogisticsTraceDeta.java
@@ -0,0 +1,62 @@
+package com.uiuios.aios.bean;
+
+import java.io.Serializable;
+
+public class LogisticsTraceDeta implements Serializable {
+ private static final long serialVersionUID = 6775968129767296804L;
+
+ String areaCode;
+ String areaName;
+ String subLogisticsStatus;
+ long time;
+ String logisticsStatus;
+ String desc;
+
+ public String getAreaCode() {
+ return areaCode;
+ }
+
+ public void setAreaCode(String areaCode) {
+ this.areaCode = areaCode;
+ }
+
+ public String getAreaName() {
+ return areaName;
+ }
+
+ public void setAreaName(String areaName) {
+ this.areaName = areaName;
+ }
+
+ public String getSubLogisticsStatus() {
+ return subLogisticsStatus;
+ }
+
+ public void setSubLogisticsStatus(String subLogisticsStatus) {
+ this.subLogisticsStatus = subLogisticsStatus;
+ }
+
+ public long getTime() {
+ return time;
+ }
+
+ public void setTime(long time) {
+ this.time = time;
+ }
+
+ public String getLogisticsStatus() {
+ return logisticsStatus;
+ }
+
+ public void setLogisticsStatus(String logisticsStatus) {
+ this.logisticsStatus = logisticsStatus;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/bean/OrderIndexBean.java b/app/src/main/java/com/uiuios/aios/bean/OrderIndexBean.java
index 1ba5b19..7f75e0a 100644
--- a/app/src/main/java/com/uiuios/aios/bean/OrderIndexBean.java
+++ b/app/src/main/java/com/uiuios/aios/bean/OrderIndexBean.java
@@ -5,7 +5,7 @@ import java.io.Serializable;
public class OrderIndexBean implements Serializable {
private static final long serialVersionUID = 4544929539747251262L;
- int id;
+ String id;
String order_sn;
String sn_id;
String sn;
@@ -39,11 +39,11 @@ public class OrderIndexBean implements Serializable {
AdminInfo admin;// 关联企业
- public int getId() {
+ public String getId() {
return id;
}
- public void setId(int id) {
+ public void setId(String id) {
this.id = id;
}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java b/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java
index 98b2e5e..3e390a6 100644
--- a/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java
+++ b/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java
@@ -235,7 +235,7 @@ public class SecondFragment extends BaseFragment implements SecondContact.View,
if (mNewGoodsAdapter.getItemCount() == 0 || mGoodsScrolling) {
return;
}
- Log.e(TAG, "run: " + mNewGoodsAdapter.getItemCount());
+ Log.i(TAG, "run: " + mNewGoodsAdapter.getItemCount());
if (mNewGoodsAdapter.getItemCount() <= mCurrentGoodsIndex) {
mCurrentGoodsIndex = 0;
} else {
diff --git a/app/src/main/java/com/uiuios/aios/network/NetInterfaceManager.java b/app/src/main/java/com/uiuios/aios/network/NetInterfaceManager.java
index 196b20e..7849c8f 100644
--- a/app/src/main/java/com/uiuios/aios/network/NetInterfaceManager.java
+++ b/app/src/main/java/com/uiuios/aios/network/NetInterfaceManager.java
@@ -21,6 +21,7 @@ import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.CategoryBean;
import com.uiuios.aios.bean.Contact;
import com.uiuios.aios.bean.DemandBean;
+import com.uiuios.aios.bean.ExpressData;
import com.uiuios.aios.bean.GoodsList;
import com.uiuios.aios.bean.GoodsType;
import com.uiuios.aios.bean.HealthCode;
@@ -79,6 +80,7 @@ import com.uiuios.aios.network.api.UpdateDesktopApi;
import com.uiuios.aios.network.api.UserInfoControl;
import com.uiuios.aios.network.api.amap.GeocodingApi;
import com.uiuios.aios.network.api.order.AllOrderApi;
+import com.uiuios.aios.network.api.order.OrderExpressApi;
import com.uiuios.aios.network.api.order.OrderIndexApi;
import com.uiuios.aios.network.interceptor.RepeatRequestInterceptor;
@@ -485,6 +487,12 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
+ public Observable> getOrderExpressObservable(String order_sn, String order_id) {
+ return mRetrofit.create(OrderExpressApi.class)
+ .getOrderExpress(RemoteManager.getInstance().getSerial(), order_sn,order_id)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
public RegionListApi getRegionListApi() {
return mRetrofit.create(RegionListApi.class);
diff --git a/app/src/main/java/com/uiuios/aios/network/api/order/OrderExpressApi.java b/app/src/main/java/com/uiuios/aios/network/api/order/OrderExpressApi.java
new file mode 100644
index 0000000..4f16e12
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/network/api/order/OrderExpressApi.java
@@ -0,0 +1,18 @@
+package com.uiuios.aios.network.api.order;
+
+import com.uiuios.aios.bean.BaseResponse;
+import com.uiuios.aios.bean.ExpressData;
+import com.uiuios.aios.network.UrlAddress;
+
+import io.reactivex.rxjava3.core.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface OrderExpressApi {
+ @GET(UrlAddress.ORDER_EXPRESS)
+ Observable> getOrderExpress(
+ @Query("sn") String sn,
+ @Query("order_sn") String order_sn,
+ @Query("order_id") String order_id
+ );
+}
diff --git a/app/src/main/java/com/uiuios/aios/utils/TimeUtils.java b/app/src/main/java/com/uiuios/aios/utils/TimeUtils.java
index e0b58e7..b850326 100644
--- a/app/src/main/java/com/uiuios/aios/utils/TimeUtils.java
+++ b/app/src/main/java/com/uiuios/aios/utils/TimeUtils.java
@@ -33,6 +33,12 @@ public class TimeUtils {
return sdf.format(date);
}
+ public static String transferSecondgToHour(long second) {
+ SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
+ Date date = new Date(second * 1000);
+ return sdf.format(date);
+ }
+
public static String secToTime(int totalSecs) {
int hours = totalSecs / 3600;
int minutes = (totalSecs % 3600) / 60;
diff --git a/app/src/main/java/com/uiuios/aios/view/TimelineLayout.java b/app/src/main/java/com/uiuios/aios/view/TimelineLayout.java
new file mode 100644
index 0000000..d6d98d8
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/view/TimelineLayout.java
@@ -0,0 +1,162 @@
+package com.uiuios.aios.view;
+
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.drawable.BitmapDrawable;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import androidx.annotation.Nullable;
+
+import com.uiuios.aios.R;
+
+/**
+ * Created by Jackie on 2017/3/8.
+ * 时间轴控件
+ */
+
+public class TimelineLayout extends LinearLayout {
+ private Context mContext;
+
+ private int mLineMarginLeft;
+ private int mLineMarginTop;
+ private int mLineStrokeWidth;
+ private int mLineColor;
+ private int mPointSize;
+ private int mPointColor;
+ private Bitmap mIcon;
+
+ private Paint mLinePaint; //线的画笔
+ private Paint mPointPaint; //点的画笔
+
+
+ //第一个点的位置
+ private int mFirstX;
+ private int mFirstY;
+ //最后一个图标的位置
+ private int mLastX;
+ private int mLastY;
+
+ public TimelineLayout(Context context) {
+ this(context, null);
+ }
+
+ public TimelineLayout(Context context, @Nullable AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public TimelineLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TimelineLayout);
+ mLineMarginLeft = ta.getDimensionPixelOffset(R.styleable.TimelineLayout_line_margin_left, 10);
+ mLineMarginTop = ta.getDimensionPixelOffset(R.styleable.TimelineLayout_line_margin_top, 0);
+ mLineStrokeWidth = ta.getDimensionPixelOffset(R.styleable.TimelineLayout_line_stroke_width, 5);
+ mLineColor = ta.getColor(R.styleable.TimelineLayout_line_color, 0xff3dd1a5);
+ mPointSize = ta.getDimensionPixelSize(R.styleable.TimelineLayout_point_size, 8);
+ mPointColor = ta.getDimensionPixelOffset(R.styleable.TimelineLayout_point_color, 0xff3dd1a5);
+
+ int iconRes = ta.getResourceId(R.styleable.TimelineLayout_icon_src, R.drawable.ic_ok);
+ BitmapDrawable drawable = (BitmapDrawable) context.getResources().getDrawable(iconRes);
+ if (drawable != null) {
+ mIcon = drawable.getBitmap();
+ }
+
+ ta.recycle();
+
+ setWillNotDraw(false);
+ initView(context);
+ }
+
+ private void initView(Context context) {
+ this.mContext = context;
+
+ mLinePaint = new Paint();
+ mLinePaint.setAntiAlias(true);
+ mLinePaint.setDither(true);
+ mLinePaint.setColor(mLineColor);
+ mLinePaint.setStrokeWidth(mLineStrokeWidth);
+ mLinePaint.setStyle(Paint.Style.FILL_AND_STROKE);
+
+ mPointPaint = new Paint();
+ mPointPaint.setAntiAlias(true);
+ mPointPaint.setDither(true);
+ mPointPaint.setColor(mPointColor);
+ mPointPaint.setStyle(Paint.Style.FILL);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+ drawTimeline(canvas);
+ Log.e("TimelineLayout", "onDraw: ");
+ }
+
+ private void drawTimeline(Canvas canvas) {
+ Log.e("TimelineLayout", "drawTimeline: ");
+ int childCount = getChildCount();
+ if (childCount > 0) {
+ if (childCount > 1) {
+ //大于1,证明至少有2个,也就是第一个和第二个之间连成线,第一个和最后一个分别有点和icon
+ drawFirstPoint(canvas);
+ drawLastIcon(canvas);
+ drawBetweenLine(canvas);
+ } else if (childCount == 1) {
+ drawFirstPoint(canvas);
+ }
+ }
+ }
+
+ private void drawFirstPoint(Canvas canvas) {
+ View child = getChildAt(0);
+ if (child != null) {
+ int top = child.getTop();
+ mFirstX = mLineMarginLeft;
+ mFirstY = top + child.getPaddingTop() + mLineMarginTop;
+ //画圆
+ canvas.drawCircle(mFirstX, mFirstY, mPointSize, mPointPaint);
+ }
+ }
+
+ private void drawLastIcon(Canvas canvas) {
+ View child = getChildAt(getChildCount() - 1);
+ if (child != null) {
+ int top = child.getTop();
+ mLastX = mLineMarginLeft;
+ mLastY = top + child.getPaddingTop() + mLineMarginTop;
+ //画图
+ canvas.drawBitmap(mIcon, mLastX - (mIcon.getWidth() >> 1), mLastY, null);
+ }
+ }
+
+ private void drawBetweenLine(Canvas canvas) {
+ Log.e("TimelineLayout", "drawBetweenLine: " + getChildCount());
+ //从开始的点到最后的图标之间,画一条线
+ canvas.drawLine(mFirstX, mFirstY, mLastX, mLastY, mLinePaint);
+ Log.e("TimelineLayout", "drawBetweenLine: mFirstX = " + mFirstX);
+ Log.e("TimelineLayout", "drawBetweenLine: mFirstY = " + mFirstY);
+ Log.e("TimelineLayout", "drawBetweenLine: mLastX = " + mLastX);
+ Log.e("TimelineLayout", "drawBetweenLine: mLastY = " + mLastY);
+ for (int i = 0; i < getChildCount() - 1; i++) {
+ //画圆
+ int top = getChildAt(i).getTop();
+ int y = top + getChildAt(i).getPaddingTop() + mLineMarginTop;
+ canvas.drawCircle(mFirstX, y, mPointSize, mPointPaint);
+ Log.e("TimelineLayout", "drawBetweenLine: y = " + y);
+ }
+ }
+
+ public int getLineMarginLeft() {
+ return mLineMarginLeft;
+ }
+
+ public void setLineMarginLeft(int lineMarginLeft) {
+ this.mLineMarginLeft = lineMarginLeft;
+ invalidate();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable-hdpi/goods_placeholder.png b/app/src/main/res/drawable-hdpi/goods_placeholder.png
new file mode 100644
index 0000000..b0735c1
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/goods_placeholder.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_ok.png b/app/src/main/res/drawable-hdpi/ic_ok.png
new file mode 100644
index 0000000..de6b916
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_ok.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_list_nodata.png b/app/src/main/res/drawable-hdpi/icon_list_nodata.png
new file mode 100644
index 0000000..bb1da94
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_list_nodata.png differ
diff --git a/app/src/main/res/drawable/express_background.xml b/app/src/main/res/drawable/express_background.xml
new file mode 100644
index 0000000..0a3a68f
--- /dev/null
+++ b/app/src/main/res/drawable/express_background.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/search_bg.xml b/app/src/main/res/drawable/search_bg.xml
index bd38047..5ea99f6 100644
--- a/app/src/main/res/drawable/search_bg.xml
+++ b/app/src/main/res/drawable/search_bg.xml
@@ -3,6 +3,6 @@
+ android:color="@color/action_bar_red" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_express.xml b/app/src/main/res/layout/activity_express.xml
new file mode 100644
index 0000000..ed62eb1
--- /dev/null
+++ b/app/src/main/res/layout/activity_express.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_goods.xml b/app/src/main/res/layout/activity_goods.xml
index 7e02541..4e1d5ce 100644
--- a/app/src/main/res/layout/activity_goods.xml
+++ b/app/src/main/res/layout/activity_goods.xml
@@ -78,10 +78,12 @@
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ app:layout_constraintTop_toBottomOf="@+id/constraintLayout"
+ app:tabIndicatorColor="@color/action_bar_red"
+ app:tabIndicatorFullWidth="false"
+ app:tabSelectedTextColor="@color/action_bar_red"
app:tabTextAppearance="@style/TabLayoutTextStyle"
- app:tabTextColor="@color/black"
- app:tabSelectedTextColor="@color/red"
- app:layout_constraintTop_toBottomOf="@+id/constraintLayout" />
+ app:tabTextColor="@color/black" />
@@ -109,6 +111,7 @@
android:layout_marginTop="@dimen/dp_8"
android:maxLines="1"
android:text="没有数据"
+ android:textSize="@dimen/sp_12"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iv1" />
diff --git a/app/src/main/res/layout/activity_information.xml b/app/src/main/res/layout/activity_information.xml
index 571974d..c823f82 100644
--- a/app/src/main/res/layout/activity_information.xml
+++ b/app/src/main/res/layout/activity_information.xml
@@ -14,23 +14,34 @@
android:layout_height="match_parent"
android:background="@color/gray">
-
+ android:background="@color/action_bar_red"
+ android:layout_height="wrap_content">
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@+id/cl_bar" />
+ app:layout_constraintTop_toBottomOf="@+id/cl_bar">
diff --git a/app/src/main/res/layout/activity_order.xml b/app/src/main/res/layout/activity_order.xml
index c5f49d3..ce8679f 100644
--- a/app/src/main/res/layout/activity_order.xml
+++ b/app/src/main/res/layout/activity_order.xml
@@ -117,7 +117,7 @@
android:layout_marginTop="@dimen/dp_8"
android:layout_marginBottom="@dimen/dp_8"
android:adjustViewBounds="true"
- app:error="@{@drawable/he999}"
+ app:error="@{@drawable/goods_placeholder}"
app:imageUrl="@{goodsInfo.img}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
diff --git a/app/src/main/res/layout/activity_order_list.xml b/app/src/main/res/layout/activity_order_list.xml
index 68aae14..cbb63eb 100644
--- a/app/src/main/res/layout/activity_order_list.xml
+++ b/app/src/main/res/layout/activity_order_list.xml
@@ -23,6 +23,7 @@
app:layout_constraintTop_toTopOf="parent">
@@ -94,8 +97,46 @@
android:id="@+id/rv_order"
android:layout_width="match_parent"
android:layout_height="0dp"
+ android:background="@color/gray"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tabLayout" />
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_pay.xml b/app/src/main/res/layout/activity_pay.xml
index 12e3099..67e35a3 100644
--- a/app/src/main/res/layout/activity_pay.xml
+++ b/app/src/main/res/layout/activity_pay.xml
@@ -58,7 +58,7 @@
android:layout_marginTop="@dimen/dp_16"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
- app:error="@{@drawable/he999}"
+ app:error="@{@drawable/goods_placeholder}"
app:imageUrl="@{wxpayBean.goods_img}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -94,7 +94,7 @@
android:id="@+id/tv_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/dp_32"
+ android:layout_marginTop="@dimen/dp_16"
android:text="@{wxpayBean.price}"
android:textColor="@color/red"
android:textSize="@dimen/sp_18"
@@ -103,7 +103,6 @@
app:layout_constraintTop_toBottomOf="@+id/textView13"
tools:text="100.00" />
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_order.xml b/app/src/main/res/layout/item_order.xml
index 8f5e09c..e0606dc 100644
--- a/app/src/main/res/layout/item_order.xml
+++ b/app/src/main/res/layout/item_order.xml
@@ -11,6 +11,8 @@
android:background="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
+ android:layout_marginBottom="@dimen/dp_4"
app:layout_constraintTop_toTopOf="parent">
+
+
+
+
+
+
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/view2" />
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_timeline.xml b/app/src/main/res/layout/item_timeline.xml
new file mode 100644
index 0000000..05df2b3
--- /dev/null
+++ b/app/src/main/res/layout/item_timeline.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 0a3c5fe..e00addf 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -50,4 +50,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file