Procházet zdrojové kódy

Merge remote-tracking branch 'origin/sheep2.0' into sheep2.0

zengjiebin před 8 roky
rodič
revize
769ae001ab
61 změnil soubory, kde provedl 2672 přidání a 23 odebrání
  1. 9 1
      app/src/main/AndroidManifest.xml
  2. 4 1
      app/src/main/java/com/kfzs/duanduan/fragment/FgtPersonalCenter.java
  3. 139 0
      app/src/main/java/com/kfzs/duanduan/fragment/FgtSignRankings.java
  4. 1 1
      app/src/main/java/com/kfzs/duanduan/fragment/FgtSmallSheep.java
  5. 17 0
      app/src/main/java/com/sheep/gamegroup/di/components/SignCardComponent.java
  6. 19 0
      app/src/main/java/com/sheep/gamegroup/di/components/SignRankingsComponent.java
  7. 16 0
      app/src/main/java/com/sheep/gamegroup/di/components/SignRecordComponent.java
  8. 22 0
      app/src/main/java/com/sheep/gamegroup/di/modules/SignCardModule.java
  9. 22 0
      app/src/main/java/com/sheep/gamegroup/di/modules/SignRankingsModule.java
  10. 22 0
      app/src/main/java/com/sheep/gamegroup/di/modules/SignRecordModule.java
  11. 63 3
      app/src/main/java/com/sheep/gamegroup/model/api/ApiService.java
  12. 26 0
      app/src/main/java/com/sheep/gamegroup/model/entity/PunchEntity.java
  13. 40 0
      app/src/main/java/com/sheep/gamegroup/model/entity/PunchLogEntity.java
  14. 47 0
      app/src/main/java/com/sheep/gamegroup/model/entity/StatisticsEntity.java
  15. 32 0
      app/src/main/java/com/sheep/gamegroup/presenter/SignCardContract.java
  16. 137 0
      app/src/main/java/com/sheep/gamegroup/presenter/SignCardPresenter.java
  17. 21 0
      app/src/main/java/com/sheep/gamegroup/presenter/SignRankingsContract.java
  18. 53 0
      app/src/main/java/com/sheep/gamegroup/presenter/SignRankingsPresenter.java
  19. 25 0
      app/src/main/java/com/sheep/gamegroup/presenter/SignRecordContract.java
  20. 64 0
      app/src/main/java/com/sheep/gamegroup/presenter/SignRecordPresenter.java
  21. 39 0
      app/src/main/java/com/sheep/gamegroup/util/Jump2View.java
  22. 17 17
      app/src/main/java/com/sheep/gamegroup/util/TestUtil.java
  23. 211 0
      app/src/main/java/com/sheep/gamegroup/view/activity/SignCardAct.java
  24. 102 0
      app/src/main/java/com/sheep/gamegroup/view/activity/SignRankingsAct.java
  25. 209 0
      app/src/main/java/com/sheep/gamegroup/view/activity/SignRecordAct.java
  26. 14 0
      app/src/main/java/com/sheep/gamegroup/view/adapter/expandadapter/BaseItem.java
  27. 328 0
      app/src/main/java/com/sheep/gamegroup/view/adapter/expandadapter/BaseRecyclerViewAdapter.java
  28. 42 0
      app/src/main/java/com/sheep/gamegroup/view/adapter/expandadapter/BaseViewHolder.java
  29. 73 0
      app/src/main/java/com/sheep/gamegroup/view/adapter/expandadapter/GroupItem.java
  30. 33 0
      app/src/main/java/com/sheep/gamegroup/view/adapter/expandadapter/OnRecyclerViewListener.java
  31. 50 0
      app/src/main/java/com/sheep/gamegroup/view/adapter/expandadapter/RecyclerViewData.java
  32. 93 0
      app/src/main/java/com/sheep/gamegroup/view/adapter/expandadapter/SignRecordAdapter.java
  33. 35 0
      app/src/main/java/com/sheep/gamegroup/view/adapter/expandadapter/SignRecordViewHolder.java
  34. binární
      app/src/main/res/drawable-xhdpi/sign_ljdk_bg.png
  35. binární
      app/src/main/res/drawable-xhdpi/sign_lxdk_bg.png
  36. binární
      app/src/main/res/drawable-xhdpi/sign_rankings_1.png
  37. binární
      app/src/main/res/drawable-xhdpi/sign_rankings_2.png
  38. binární
      app/src/main/res/drawable-xhdpi/sign_rankings_3.png
  39. binární
      app/src/main/res/drawable-xhdpi/sign_right_bg.png
  40. binární
      app/src/main/res/drawable-xhdpi/sign_up_bg.png
  41. binární
      app/src/main/res/drawable-xxhdpi/sign_band_bg.png
  42. binární
      app/src/main/res/drawable-xxhdpi/sign_ljdk_bg.png
  43. binární
      app/src/main/res/drawable-xxhdpi/sign_lxdk_bg.png
  44. binární
      app/src/main/res/drawable-xxhdpi/sign_rankings_1.png
  45. binární
      app/src/main/res/drawable-xxhdpi/sign_rankings_2.png
  46. binární
      app/src/main/res/drawable-xxhdpi/sign_rankings_3.png
  47. binární
      app/src/main/res/drawable-xxhdpi/sign_right_bg.png
  48. binární
      app/src/main/res/drawable-xxhdpi/sign_up_bg.png
  49. 11 0
      app/src/main/res/drawable/shape_blue_stroke_rectangle.xml
  50. 9 0
      app/src/main/res/drawable/shape_sign_rankings_left_hold.xml
  51. 9 0
      app/src/main/res/drawable/shape_sign_rankings_left_normal.xml
  52. 9 0
      app/src/main/res/drawable/shape_sign_rankings_right_hold.xml
  53. 9 0
      app/src/main/res/drawable/shape_sign_rankings_right_normal.xml
  54. 48 0
      app/src/main/res/layout/fgt_sign_rankings.xml
  55. 264 0
      app/src/main/res/layout/sign_card_layout.xml
  56. 43 0
      app/src/main/res/layout/sign_rankings_item.xml
  57. 66 0
      app/src/main/res/layout/sign_rankings_layout.xml
  58. 27 0
      app/src/main/res/layout/sign_record_item_child.xml
  59. 25 0
      app/src/main/res/layout/sign_record_item_group.xml
  60. 118 0
      app/src/main/res/layout/sign_record_layout.xml
  61. 9 0
      app/src/main/res/values/strings.xml

+ 9 - 1
app/src/main/AndroidManifest.xml

@@ -144,7 +144,7 @@
 
         </activity>
 
-        <activity android:name="com.sheep.gamegroup.view.activity.SplashAct"
+       <activity android:name="com.sheep.gamegroup.view.activity.SplashAct"
             android:screenOrientation="portrait"
             android:theme="@style/SplashTheme"
             >
@@ -315,6 +315,14 @@
         <activity android:name="com.sheep.gamegroup.view.activity.ActMyMoney" android:screenOrientation="portrait"/>
         <activity android:name="com.sheep.gamegroup.view.activity.FeedbackAct" android:screenOrientation="portrait"/>
         <activity android:name="com.sheep.gamegroup.view.activity.ActMainGame" android:screenOrientation="portrait"/>
+
+
+
+        <activity android:name="com.sheep.gamegroup.view.activity.SignCardAct" android:screenOrientation="portrait"/>
+        <activity android:name="com.sheep.gamegroup.view.activity.SignRankingsAct" android:screenOrientation="portrait"/>
+        <activity android:name="com.sheep.gamegroup.view.activity.SignRecordAct" android:screenOrientation="portrait"/>
+
+
         <!--友盟start-->
 
 

+ 4 - 1
app/src/main/java/com/kfzs/duanduan/fragment/FgtPersonalCenter.java

@@ -124,7 +124,7 @@ public class FgtPersonalCenter extends BaseCompatFragment {
         super.onDestroyView();
         unbinder.unbind();
     }
-
+    int textPostion = 0;
     @OnClick({R.id.icon_img_iv, R.id.account_detail_layout, R.id.personalcenter_price_layout, R.id.account_safe_layout, R.id.account_task_layout, R.id.proxy_service_layout, R.id.abourt_us_layout, R.id.feedbook_layout, R.id.recommend_friend_layout, R.id.tv_submit})
     public void onViewClicked(View view) {
         switch (view.getId()) {
@@ -134,14 +134,17 @@ public class FgtPersonalCenter extends BaseCompatFragment {
                 break;
             case R.id.personalcenter_price_layout://我的资产
                 Jump2View.getInstance().goMyMoney(getActivity(), null);
+//                Jump2View.getInstance().goSignCardAct(getActivity(), null);
                 break;
             case R.id.account_safe_layout:
                 Jump2View.getInstance().goAccountAndSecurit(getActivity(), null);
                 break;
             case R.id.account_task_layout://任务记录
                 Jump2View.getInstance().goTaskList2View(getActivity(), null);
+//                Jump2View.getInstance().goSignRecordAct(getActivity(), null);
                 break;
             case R.id.proxy_service_layout://代理
+//                Jump2View.getInstance().goSignRankingsAct(getActivity(), null);
                 G.showToast("敬请期待!");
                 break;
             case R.id.abourt_us_layout://关于我们

+ 139 - 0
app/src/main/java/com/kfzs/duanduan/fragment/FgtSignRankings.java

@@ -0,0 +1,139 @@
+package com.kfzs.duanduan.fragment;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSONObject;
+import com.kfzs.appstore.utils.adapter.recyclerview.RecyclerViewAdapter;
+import com.kfzs.appstore.utils.adapter.recyclerview.ViewHolder;
+import com.kfzs.duanduan.BaseCompatFragment;
+import com.sheep.gamegroup.di.components.DaggerSignRankingsComponent;
+import com.sheep.gamegroup.di.modules.SignRankingsModule;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.model.entity.PunchEntity;
+import com.sheep.gamegroup.presenter.SignRankingsContract;
+import com.sheep.gamegroup.presenter.SignRankingsPresenter;
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.utils.G;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.Unbinder;
+
+
+/**
+ * 打卡排行榜
+ */
+public class FgtSignRankings extends BaseCompatFragment implements SignRankingsContract.View{
+
+
+    @Inject
+    SignRankingsPresenter presenter;
+
+    int type;
+
+    @BindView(R.id.signRankings_RecyclerView)
+    RecyclerView signRankingsRecyclerView;
+    Unbinder unbinder;
+
+    RecyclerViewAdapter recyclerViewAdapter;
+
+    public static FgtSignRankings getInstance(int type) {
+        FgtSignRankings fgtSignRankings = new FgtSignRankings();
+        Bundle bundle = new Bundle();
+        bundle.putInt("type", type);
+        fgtSignRankings.setArguments(bundle);
+        return fgtSignRankings;
+    }
+
+    @Override
+    public void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        type = getArguments().getInt("type", 0);
+        DaggerSignRankingsComponent.builder()
+                .netComponent(SheepApp.get(getActivity()).getNetComponent())
+                .signRankingsModule(new SignRankingsModule(this))
+                .build()
+                .inject(this);
+
+    }
+
+    @Override
+    protected void initView(Bundle savedInstanceState) {
+        setContentView(R.layout.fgt_sign_rankings);
+    }
+
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+        View rootView = super.onCreateView(inflater, container, savedInstanceState);
+        unbinder = ButterKnife.bind(this, rootView);
+        signRankingsRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
+        switch (type){
+            case 0://获取累计打卡
+                presenter.getTotalPunchTop();
+                break;
+            case 1://获取连续打卡
+                presenter.getContinuePunchTop();
+                break;
+        }
+        return rootView;
+    }
+
+    @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+        unbinder.unbind();
+    }
+
+    @Override
+    public void succPunch(BaseMessage o) {
+        Log.d("Dream","type:"+ type+" succPunch:"+o.getData().toString());
+        List<PunchEntity> list = o.getDatas(PunchEntity.class);
+        recyclerViewAdapter = new RecyclerViewAdapter<PunchEntity>(getContext(), R.layout.sign_rankings_item, list) {
+            @Override
+            public void convert(ViewHolder viewHolder, PunchEntity punchEntity, final int position) {
+                ImageView sign_iv_icon = viewHolder.getView(R.id.sign_iv_icon);
+                TextView sign_tv_name = viewHolder.getView(R.id.sign_tv_name);
+                TextView sign_tv_pm = viewHolder.getView(R.id.sign_tv_pm);
+                if(position == 0){
+                    sign_iv_icon.setVisibility(View.VISIBLE);
+                    sign_iv_icon.setImageResource(R.drawable.sign_rankings_1);
+                }else if(position == 1){
+                    sign_iv_icon.setVisibility(View.VISIBLE);
+                    sign_iv_icon.setImageResource(R.drawable.sign_rankings_2);
+                }else if(position == 2){
+                    sign_iv_icon.setVisibility(View.VISIBLE);
+                    sign_iv_icon.setImageResource(R.drawable.sign_rankings_3);
+                }else{
+                    sign_iv_icon.setVisibility(View.INVISIBLE);
+                }
+
+                sign_tv_name.setText(punchEntity.getNick_name());
+                sign_tv_pm.setText(punchEntity.getNum());
+            }
+        };
+        signRankingsRecyclerView.setAdapter(recyclerViewAdapter);
+    }
+
+    @Override
+    public void failPunch(BaseMessage o) {
+        G.showToast(o.getMsg());
+    }
+}

+ 1 - 1
app/src/main/java/com/kfzs/duanduan/fragment/FgtSmallSheep.java

@@ -442,7 +442,7 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
                 break;
             case R.id.icon_layout://
                 if(BuildConfig.DEBUG) {
-                    TestUtil.test(activity);
+//                    TestUtil.test(activity);
                 }else
                     Jump2View.getInstance().goPersonnalCenterView(activity, null);
                 break;

+ 17 - 0
app/src/main/java/com/sheep/gamegroup/di/components/SignCardComponent.java

@@ -0,0 +1,17 @@
+package com.sheep.gamegroup.di.components;
+
+import com.sheep.gamegroup.di.modules.SignCardModule;
+import com.sheep.gamegroup.di.scopes.UserScope;
+import com.sheep.gamegroup.view.activity.RechargeQAct;
+import com.sheep.gamegroup.view.activity.SignCardAct;
+
+import dagger.Component;
+
+/**
+ * Created by ljy on 2018/3/18.
+ */
+@UserScope
+@Component(modules = SignCardModule.class, dependencies = NetComponent.class)
+public interface SignCardComponent {
+    void inject(SignCardAct withdrawalAct);
+}

+ 19 - 0
app/src/main/java/com/sheep/gamegroup/di/components/SignRankingsComponent.java

@@ -0,0 +1,19 @@
+package com.sheep.gamegroup.di.components;
+
+import com.kfzs.duanduan.fragment.FgtSignRankings;
+import com.sheep.gamegroup.di.modules.RechargeQModule;
+import com.sheep.gamegroup.di.modules.SignRankingsModule;
+import com.sheep.gamegroup.di.scopes.UserScope;
+import com.sheep.gamegroup.view.activity.RechargeQAct;
+import com.sheep.gamegroup.view.activity.SignRankingsAct;
+
+import dagger.Component;
+
+/**
+ * Created by ljy on 2018/3/18.
+ */
+@UserScope
+@Component(modules = SignRankingsModule.class, dependencies = NetComponent.class)
+public interface SignRankingsComponent {
+    void inject(FgtSignRankings withdrawalfgt);
+}

+ 16 - 0
app/src/main/java/com/sheep/gamegroup/di/components/SignRecordComponent.java

@@ -0,0 +1,16 @@
+package com.sheep.gamegroup.di.components;
+
+import com.sheep.gamegroup.di.modules.SignRecordModule;
+import com.sheep.gamegroup.di.scopes.UserScope;
+import com.sheep.gamegroup.view.activity.SignRecordAct;
+
+import dagger.Component;
+
+/**
+ * Created by ljy on 2018/3/18.
+ */
+@UserScope
+@Component(modules = SignRecordModule.class, dependencies = NetComponent.class)
+public interface SignRecordComponent {
+    void inject(SignRecordAct withdrawalAct);
+}

+ 22 - 0
app/src/main/java/com/sheep/gamegroup/di/modules/SignCardModule.java

@@ -0,0 +1,22 @@
+package com.sheep.gamegroup.di.modules;
+
+import com.sheep.gamegroup.presenter.SignCardContract;
+
+import dagger.Module;
+import dagger.Provides;
+
+/**
+ * Created by ljy on 2018/3/18.
+ */
+@Module
+public class SignCardModule {
+    private SignCardContract.View view;
+
+    public SignCardModule(SignCardContract.View view) {
+        this.view = view;
+    }
+    @Provides
+    public SignCardContract.View provideView(){
+        return view;
+    }
+}

+ 22 - 0
app/src/main/java/com/sheep/gamegroup/di/modules/SignRankingsModule.java

@@ -0,0 +1,22 @@
+package com.sheep.gamegroup.di.modules;
+
+import com.sheep.gamegroup.presenter.SignRankingsContract;
+
+import dagger.Module;
+import dagger.Provides;
+
+/**
+ * Created by ljy on 2018/3/18.
+ */
+@Module
+public class SignRankingsModule {
+    private SignRankingsContract.View view;
+
+    public SignRankingsModule(SignRankingsContract.View view) {
+        this.view = view;
+    }
+    @Provides
+    public SignRankingsContract.View provideView(){
+        return view;
+    }
+}

+ 22 - 0
app/src/main/java/com/sheep/gamegroup/di/modules/SignRecordModule.java

@@ -0,0 +1,22 @@
+package com.sheep.gamegroup.di.modules;
+
+import com.sheep.gamegroup.presenter.SignRecordContract;
+
+import dagger.Module;
+import dagger.Provides;
+
+/**
+ * Created by ljy on 2018/3/18.
+ */
+@Module
+public class SignRecordModule {
+    private SignRecordContract.View view;
+
+    public SignRecordModule(SignRecordContract.View view) {
+        this.view = view;
+    }
+    @Provides
+    public SignRecordContract.View provideView(){
+        return view;
+    }
+}

+ 63 - 3
app/src/main/java/com/sheep/gamegroup/model/api/ApiService.java

@@ -398,9 +398,69 @@ public interface ApiService {
      */
     @POST("app/user/agreement_back/")
     Observable<BaseMessage> agreementBack(@Body JSONArray jsonArray);
+
+
+    /*****************div****************/
+
+    /**
+     * 获取累计打卡记录
+     * 1当月 2上个月 3上上个月
+     */
+    @GET("app/punch/punch_log/{action}")
+    Observable<BaseMessage> getPunchLog(@Path("action") int action);
+
+    /**
+     * 获取连续打卡记录
+     */
+    @GET("app/punch/continue_punch_top")
+    Observable<BaseMessage> getContinuePunchTop();
+
+    /**
+     * 获取累计打卡记录
+     */
+    @GET("app/punch/total_punch_top")
+    Observable<BaseMessage> getTotalPunchTop();
+
+    /**
+     * 获取我的战绩上面的数据
+     */
+    @GET("app/punch/statistics")
+    Observable<BaseMessage> getStatistics();
+
+
+    /**
+     * 打卡
+     */
+    @PUT("app/punch")
+    Observable<BaseMessage> getPunch();
+
+    /**
+     * 一元报名
+     */
+    @POST("app/punch")
+    Observable<BaseMessage> getPunchUp();
+
+    /**
+     * 获取可以得道的奖励
+     */
+    @GET("app/punch/award")
+    Observable<BaseMessage> getPunchAward();
+
+    /**
+     * 获取是否可以打卡 1未报名 2已打卡 3可以打卡
+     */
+    @GET("app/punch/can_punch")
+    Observable<BaseMessage> getPunchCanpunch();
+
+    /**
+     * 判断今日是否能报名 true可以 false不可以
+     */
+    @GET("app/punch/can_sign_up")
+    Observable<BaseMessage> getPunchCanSignUp();
+
     /**
-     * 畅思
+     * 获取可打卡和报名人数
      */
-    @GET("app/accepted_task/status/")
-    Observable<BaseMessage> changShiStatus();
+    @GET("app/punch/punch_and_sign_count")
+    Observable<BaseMessage> getPunchAndSignCount();
 }

+ 26 - 0
app/src/main/java/com/sheep/gamegroup/model/entity/PunchEntity.java

@@ -0,0 +1,26 @@
+package com.sheep.gamegroup.model.entity;
+
+/**
+ * 打卡排行榜对象
+ */
+
+public class PunchEntity {
+    private String num;
+    private String nick_name;
+
+    public String getNum() {
+        return num;
+    }
+
+    public void setNum(String num) {
+        this.num = num;
+    }
+
+    public String getNick_name() {
+        return nick_name;
+    }
+
+    public void setNick_name(String nick_name) {
+        this.nick_name = nick_name;
+    }
+}

+ 40 - 0
app/src/main/java/com/sheep/gamegroup/model/entity/PunchLogEntity.java

@@ -0,0 +1,40 @@
+package com.sheep.gamegroup.model.entity;
+
+/**
+ * Created by Administrator on 2018/5/23.
+ * 我的战绩中->打卡记录对象
+ */
+
+public class PunchLogEntity {
+//      "Type":2,
+//              "UserId":145,
+//              "Title":"",
+//              "SurplusAmount":0.8,
+//              "WxAccount":"",
+//              "Amount":1,
+//              "CreateTime":1527082818,
+//              "From1":15,
+//              "RelateUser":0,
+//              "Id":669,
+//              "Status":"",
+//              "ReleaseTaskId":0,
+//              "DetailDesc":"打卡报名"
+    private String Amount;
+    private long CreateTime;
+
+    public String getAmount() {
+        return Amount;
+    }
+
+    public void setAmount(String amount) {
+        Amount = amount;
+    }
+
+    public long getCreateTime() {
+        return CreateTime;
+    }
+
+    public void setCreateTime(long createTime) {
+        CreateTime = createTime;
+    }
+}

+ 47 - 0
app/src/main/java/com/sheep/gamegroup/model/entity/StatisticsEntity.java

@@ -0,0 +1,47 @@
+package com.sheep.gamegroup.model.entity;
+
+/**
+ * Created by Administrator on 2018/5/23.
+ * 我的战绩中->上面部分数据模型
+ */
+
+public class StatisticsEntity {
+//    {"total_money":1,"continue_punch_count":1,"total_award":2.8,"total_punch_count":1}
+
+    private String total_money;
+    private String continue_punch_count;
+    private String total_award;
+    private String total_punch_count;
+
+    public String getTotal_money() {
+        return total_money;
+    }
+
+    public void setTotal_money(String total_money) {
+        this.total_money = total_money;
+    }
+
+    public String getContinue_punch_count() {
+        return continue_punch_count;
+    }
+
+    public void setContinue_punch_count(String continue_punch_count) {
+        this.continue_punch_count = continue_punch_count;
+    }
+
+    public String getTotal_award() {
+        return total_award;
+    }
+
+    public void setTotal_award(String total_award) {
+        this.total_award = total_award;
+    }
+
+    public String getTotal_punch_count() {
+        return total_punch_count;
+    }
+
+    public void setTotal_punch_count(String total_punch_count) {
+        this.total_punch_count = total_punch_count;
+    }
+}

+ 32 - 0
app/src/main/java/com/sheep/gamegroup/presenter/SignCardContract.java

@@ -0,0 +1,32 @@
+package com.sheep.gamegroup.presenter;
+
+import com.alibaba.fastjson.JSONObject;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+
+/**
+ * Created by ljy on 2018/3/18.
+ */
+
+public interface SignCardContract {
+
+    interface Presenter{
+
+        void goSignPunch();//打卡
+        void goSignUp();//一元报名
+        void goPunchAward();//可获得的奖励
+        void goPunchCanpunch();//获取是否可以打卡
+        void goPunchCanSignUp();//判断今日是否能报名
+        void goPunchAndSignCount();//获取可打卡和报名人数
+    }
+
+    interface View{
+        void succSignPunch(BaseMessage o);
+        void succSignUp(BaseMessage o);
+        void succPunchAward(BaseMessage o);
+        void succPunchCanpunch(BaseMessage o);
+        void succPunchCanSignUp(BaseMessage o);
+        void succPunchAndSignCount(BaseMessage o);
+        void failRequest(BaseMessage o);
+
+    }
+}

+ 137 - 0
app/src/main/java/com/sheep/gamegroup/presenter/SignCardPresenter.java

@@ -0,0 +1,137 @@
+package com.sheep.gamegroup.presenter;
+
+import com.sheep.gamegroup.model.api.ApiService;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.model.util.SheepSubscriber;
+import com.sheep.jiuyan.samllsheep.SheepApp;
+
+import javax.inject.Inject;
+
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
+
+/**
+ * Created by ljy on 2018/3/18.
+ */
+
+public class SignCardPresenter implements SignCardContract.Presenter {
+
+    private SignCardContract.View view;
+    private ApiService apiService;
+
+    @Inject
+    public SignCardPresenter(SignCardContract.View view, ApiService apiService) {
+        this.view = view;
+        this.apiService = apiService;
+    }
+
+
+    @Override
+    public void goSignPunch() {
+        apiService.getPunch()
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.mContext) {
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        view.failRequest(baseMessage);
+                    }
+
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        view.succSignPunch(baseMessage);
+                    }
+                });
+    }
+
+    @Override
+    public void goSignUp() {
+        apiService.getPunchUp()
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.mContext) {
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        view.failRequest(baseMessage);
+                    }
+
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        view.succSignUp(baseMessage);
+                    }
+                });
+    }
+
+    @Override
+    public void goPunchAward() {
+        apiService.getPunchAward()
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.mContext) {
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        view.failRequest(baseMessage);
+                    }
+
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        view.succPunchAward(baseMessage);
+                    }
+                });
+    }
+
+    @Override
+    public void goPunchCanpunch() {
+        apiService.getPunchCanpunch()
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.mContext) {
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        view.failRequest(baseMessage);
+                    }
+
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        view.succPunchCanpunch(baseMessage);
+                    }
+                });
+    }
+
+    @Override
+    public void goPunchCanSignUp() {
+        apiService.getPunchCanSignUp()
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.mContext) {
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        view.failRequest(baseMessage);
+                    }
+
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        view.succPunchCanSignUp(baseMessage);
+                    }
+                });
+    }
+
+    @Override
+    public void goPunchAndSignCount() {
+        apiService.getPunchAndSignCount()
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.mContext) {
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        view.failRequest(baseMessage);
+                    }
+
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        view.succPunchAndSignCount(baseMessage);
+                    }
+                });
+    }
+
+}

+ 21 - 0
app/src/main/java/com/sheep/gamegroup/presenter/SignRankingsContract.java

@@ -0,0 +1,21 @@
+package com.sheep.gamegroup.presenter;
+
+import com.sheep.gamegroup.model.entity.BaseMessage;
+
+/**
+ * Created by ljy on 2018/3/18.
+ */
+
+public interface SignRankingsContract {
+
+    interface Presenter{
+
+        void getContinuePunchTop();//连续打卡
+        void getTotalPunchTop();//累计打卡
+    }
+
+    interface View{
+        void succPunch(BaseMessage o);
+        void failPunch(BaseMessage o);
+    }
+}

+ 53 - 0
app/src/main/java/com/sheep/gamegroup/presenter/SignRankingsPresenter.java

@@ -0,0 +1,53 @@
+package com.sheep.gamegroup.presenter;
+
+import com.sheep.gamegroup.model.api.ApiService;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.model.util.SheepSubscriber;
+import com.sheep.jiuyan.samllsheep.SheepApp;
+
+import javax.inject.Inject;
+
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
+
+/**
+ * Created by ljy on 2018/3/18.
+ */
+
+public class SignRankingsPresenter implements SignRankingsContract.Presenter {
+
+    private SignRankingsContract.View view;
+    private ApiService apiService;
+
+    @Inject
+    public SignRankingsPresenter(SignRankingsContract.View view, ApiService apiService) {
+        this.view = view;
+        this.apiService = apiService;
+    }
+
+
+
+    @Override
+    public void getContinuePunchTop() {
+        apiService.getContinuePunchTop()
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.mContext) {
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        view.failPunch(baseMessage);
+                    }
+
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        view.succPunch(baseMessage);
+                    }
+                });
+    }
+
+    @Override
+    public void getTotalPunchTop() {
+
+    }
+
+}

+ 25 - 0
app/src/main/java/com/sheep/gamegroup/presenter/SignRecordContract.java

@@ -0,0 +1,25 @@
+package com.sheep.gamegroup.presenter;
+
+import com.sheep.gamegroup.model.entity.BaseMessage;
+
+/**
+ * Created by ljy on 2018/3/18.
+ */
+
+public interface SignRecordContract {
+
+    interface Presenter{
+
+        void getStatistics();
+        void getPunchLog(int action);
+
+    }
+
+    interface View{
+        void succStatistics(BaseMessage o);
+        void succPunchLog(BaseMessage o,int action);
+        void failStatistics(BaseMessage o);
+        void failPunchLog(BaseMessage o);
+
+    }
+}

+ 64 - 0
app/src/main/java/com/sheep/gamegroup/presenter/SignRecordPresenter.java

@@ -0,0 +1,64 @@
+package com.sheep.gamegroup.presenter;
+
+import com.sheep.gamegroup.model.api.ApiService;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.model.util.SheepSubscriber;
+import com.sheep.jiuyan.samllsheep.SheepApp;
+
+import javax.inject.Inject;
+
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
+
+/**
+ * Created by ljy on 2018/3/18.
+ */
+
+public class SignRecordPresenter implements SignRecordContract.Presenter {
+
+    private SignRecordContract.View view;
+    private ApiService apiService;
+
+    @Inject
+    public SignRecordPresenter(SignRecordContract.View view, ApiService apiService) {
+        this.view = view;
+        this.apiService = apiService;
+    }
+
+    @Override
+    public void getStatistics() {
+        apiService.getStatistics()
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.mContext) {
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        view.failStatistics(baseMessage);
+                    }
+
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        view.succStatistics(baseMessage);
+                    }
+                });
+    }
+
+    @Override
+    public void getPunchLog(final int action) {
+        apiService.getPunchLog(action)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.mContext) {
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        view.failPunchLog(baseMessage);
+                    }
+
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        view.succPunchLog(baseMessage,action);
+                    }
+                });
+    }
+
+}

+ 39 - 0
app/src/main/java/com/sheep/gamegroup/util/Jump2View.java

@@ -59,6 +59,9 @@ import com.sheep.gamegroup.view.activity.RealNameAuthenAct;
 import com.sheep.gamegroup.view.activity.RechargeAct;
 import com.sheep.gamegroup.view.activity.RechargeQAct;
 import com.sheep.gamegroup.view.activity.RechargeResultAct;
+import com.sheep.gamegroup.view.activity.SignCardAct;
+import com.sheep.gamegroup.view.activity.SignRankingsAct;
+import com.sheep.gamegroup.view.activity.SignRecordAct;
 import com.sheep.gamegroup.view.activity.TaskDetailAct;
 import com.sheep.gamegroup.view.activity.TaskDetailAddQQAct;
 import com.sheep.gamegroup.view.activity.TaskDetailCreditCardAct;
@@ -936,4 +939,40 @@ public class Jump2View {
                     });
         }
     }
+
+
+
+    /**
+     * 跳到每日打卡页面
+     * @param context
+     * @param o
+     */
+    public void goSignCardAct(Context context, Object o){
+        Intent intent = new Intent(context, SignCardAct.class);
+        context.startActivity(intent);
+    }
+
+
+    /**
+     * 跳到打卡排行榜页面
+     * @param context
+     * @param o
+     */
+    public void goSignRankingsAct(Context context, Object o){
+        Intent intent = new Intent(context, SignRankingsAct.class);
+        context.startActivity(intent);
+    }
+
+
+    /**
+     * 跳到我的战绩页面
+     * @param context
+     * @param o
+     */
+    public void goSignRecordAct(Context context, Object o){
+        Intent intent = new Intent(context, SignRecordAct.class);
+        context.startActivity(intent);
+    }
+
+
 }

+ 17 - 17
app/src/main/java/com/sheep/gamegroup/util/TestUtil.java

@@ -161,21 +161,21 @@ public class TestUtil {
         }
     }
 
-    public static void test(Activity activity) {
-        SheepApp.getInstance().getNetComponent().getApiService().changShiStatus()
-                        .subscribeOn(Schedulers.io())
-                        .observeOn(AndroidSchedulers.mainThread())
-                        .subscribe(new SheepSubscriber<BaseMessage>(activity) {
-                            @Override
-                            public void onNext(BaseMessage baseMessage) {
-                                LogUtil.println("baseMessage onNext "+ JSON.toJSONString(baseMessage));
-                            }
-
-                            @Override
-                            public void onError(BaseMessage baseMessage) {
-                                LogUtil.println("baseMessage onError "+JSON.toJSONString(baseMessage));
-                                G.showToast(TextUtils.isEmpty(baseMessage.getMsg()) ? "服务器错误,请稍候再试" : baseMessage.getMsg());
-                            }
-                        });
-    }
+//    public static void test(Activity activity) {
+//        SheepApp.getInstance().getNetComponent().getApiService().changShiStatus()
+//                        .subscribeOn(Schedulers.io())
+//                        .observeOn(AndroidSchedulers.mainThread())
+//                        .subscribe(new SheepSubscriber<BaseMessage>(activity) {
+//                            @Override
+//                            public void onNext(BaseMessage baseMessage) {
+//                                LogUtil.println("baseMessage onNext "+ JSON.toJSONString(baseMessage));
+//                            }
+//
+//                            @Override
+//                            public void onError(BaseMessage baseMessage) {
+//                                LogUtil.println("baseMessage onError "+JSON.toJSONString(baseMessage));
+//                                G.showToast(TextUtils.isEmpty(baseMessage.getMsg()) ? "服务器错误,请稍候再试" : baseMessage.getMsg());
+//                            }
+//                        });
+//    }
 }

+ 211 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/SignCardAct.java

@@ -0,0 +1,211 @@
+package com.sheep.gamegroup.view.activity;
+
+import android.app.Activity;
+import android.graphics.Color;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.annotation.RequiresApi;
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.style.AbsoluteSizeSpan;
+import android.text.style.ForegroundColorSpan;
+import android.util.Log;
+import android.view.View;
+import android.widget.TextView;
+
+import com.sheep.gamegroup.absBase.BaseActivity;
+import com.sheep.gamegroup.di.components.DaggerSignCardComponent;
+import com.sheep.gamegroup.di.modules.SignCardModule;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.presenter.SignCardContract;
+import com.sheep.gamegroup.presenter.SignCardPresenter;
+import com.sheep.gamegroup.util.Jump2View;
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.utils.G;
+import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
+
+import javax.inject.Inject;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+
+/**
+ * 每日打卡
+ */
+
+public class SignCardAct extends BaseActivity implements SignCardContract.View {
+
+    Activity activity;
+    @Inject
+    SignCardPresenter presenter;
+    @BindView(R.id.sign_tv_kpf)
+    TextView signTvKpf;
+    @BindView(R.id.sign_tv_ljdk)
+    TextView signTvLjdk;
+    @BindView(R.id.sign_tv_jrcyrs)
+    TextView signTvJrcyrs;//今日打卡人数
+    @BindView(R.id.sign_tv_dkjl)
+    TextView signTvDkjl;
+    @BindView(R.id.sign_tv_mrcyrs)
+    TextView signTvMrcyrs;
+    @BindView(R.id.sign_tv_yybm)
+    TextView signTvYybm;
+
+
+    @Override
+    protected int getLayoutId() {
+        return R.layout.sign_card_layout;
+    }
+
+    @Override
+    public void initView() {
+        activity = this;
+        TitleBarUtils
+                .getInstance()
+                .setTitle(activity, "每日打卡")
+                .setTitleFinish(activity);
+        DaggerSignCardComponent.builder()
+                .netComponent(SheepApp.get(this).getNetComponent())
+                .signCardModule(new SignCardModule(this))
+                .build()
+                .inject(this);
+
+
+    }
+
+
+    @Override
+    public void initListener() {
+
+    }
+
+    @Override
+    public void initData() {
+
+        {//测试代码,以后用真实数据填充
+            signTvKpf.setText(getSpannableString("20000"));//今日可分
+            signTvMrcyrs.setText(getSpannableString("23000"));//明日可分
+            signTvJrcyrs.setText(String.format(getString(R.string.sign_number),"100"));//今日打卡人数
+
+            String text = String.format(getString(R.string.sign_jppj),"215");
+            signTvDkjl.setText(getColorSpannableString(text));//平分的金额
+        }//测试代码,以后用真实数据填充
+
+        presenter.goPunchAward();//获取可获得的奖励
+        presenter.goPunchAndSignCount();//获取可打卡和报名人数
+
+    }
+
+    /**
+     * 打卡返回
+     * @param o
+     */
+    @Override
+    public void succSignPunch(BaseMessage o) {
+//        {"code":200,"msg":"OK"}
+        if("OK".equals(o.getMsg())){
+            showToast("打卡成功");
+        }else {
+            showToast(o.getMsg());
+        }
+    }
+
+    /**
+     * 一元报名返回
+     * @param o
+     */
+    @Override
+    public void succSignUp(BaseMessage o) {
+//        {"code":200,"msg":"OK"}
+        if("OK".equals(o.getMsg())){
+            showToast("报名成功");
+        }else {
+            showToast(o.getMsg());
+        }
+    }
+
+    /**
+     * 可获得的奖励返回
+     * @param o
+     */
+    @Override
+    public void succPunchAward(BaseMessage o) {
+//    返回    1
+        Log.d("Dream","succPunchAward:"+o.getData().toString());
+    }
+    /**
+     * 获取是否可以打卡
+     * 1未报名 2已打卡 3可以打卡
+     * @param o
+     */
+    @Override
+    public void succPunchCanpunch(BaseMessage o) {
+        if("1".equals(o.getData().toString())){
+            showToast("未报名");
+        }else if("2".equals(o.getData().toString())){
+            showToast("已打卡");
+        }else if("3".equals(o.getData().toString())){
+            presenter.goSignPunch();
+        }
+    }
+
+    /**
+     * 判断今日是否能报名
+     *  true可以 false不可以
+     * @param o
+     */
+    @Override
+    public void succPunchCanSignUp(BaseMessage o) {
+        if("true".equals(o.getData().toString())){
+            presenter.goSignUp();
+        }else if("false".equals(o.getData().toString())){
+            showToast("不可以报名");
+        }
+
+    }
+
+    /**
+     * 获取可打卡和报名人数
+     * @param o
+     */
+    @Override
+    public void succPunchAndSignCount(BaseMessage o) {
+//        {"sign_up_count":3,"punch_count":1}
+        Log.d("Dream","succPunchAndSignCount:"+o.getData().toString());
+    }
+
+    @Override
+    public void failRequest(BaseMessage o) {
+        showToast(o.getMsg());
+    }
+
+    @OnClick({R.id.sign_tv_ljdk, R.id.sign_tv_yybm})
+    public void onViewClicked(View view) {
+        switch (view.getId()) {
+            case R.id.sign_tv_ljdk://打卡
+                presenter.goPunchCanpunch();
+                break;
+            case R.id.sign_tv_yybm://一元报名
+                presenter.goPunchCanSignUp();
+                break;
+        }
+    }
+    private SpannableString getColorSpannableString(String text) {
+        SpannableString spannableString = new SpannableString(text);
+        ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#ff0006"));
+        spannableString.setSpan(colorSpan, 6, text.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+        return spannableString;
+    }
+
+    @RequiresApi(api = Build.VERSION_CODES.ECLAIR)
+    private SpannableString getSpannableString(String price) {
+        String text = String.format(getString(R.string.sign_record_money),price);
+        SpannableString spannableString = new SpannableString(text);
+        spannableString.setSpan(new AbsoluteSizeSpan(14, true), text.length() - 1, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+        return spannableString;
+    }
+
+
+}

+ 102 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/SignRankingsAct.java

@@ -0,0 +1,102 @@
+package com.sheep.gamegroup.view.activity;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.design.widget.TabLayout;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentPagerAdapter;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.view.ViewPager;
+import android.view.View;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.kfzs.duanduan.fragment.FgtSignRankings;
+import com.sheep.gamegroup.absBase.BaseActivity;
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+
+/**
+ * 打卡排行榜
+ */
+
+public class SignRankingsAct extends BaseActivity {
+
+    Activity activity;
+
+
+    @BindView(R.id.sign_ViewPager)
+    ViewPager signViewPager;
+    @BindView(R.id.sign_tv_ljdl)
+    TextView signTvLjdl;
+    @BindView(R.id.sign_rl_ljdl)
+    RelativeLayout signRlLjdl;
+    @BindView(R.id.sign_tv_lxdl)
+    TextView signTvLxdl;
+    @BindView(R.id.sign_rl_lxdl)
+    RelativeLayout signRlLxdl;
+
+    @Override
+    protected int getLayoutId() {
+        return R.layout.sign_rankings_layout;
+    }
+
+    @Override
+    public void initView() {
+        activity = this;
+        TitleBarUtils
+                .getInstance()
+                .setTitle(activity, "打卡排行榜")
+                .setTitleFinish(activity);
+
+
+        signViewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
+            @Override
+            public Fragment getItem(int position) {
+                FgtSignRankings fragment = FgtSignRankings.getInstance(position);
+                return fragment;
+            }
+
+            @Override
+            public int getCount() {
+                return 2;
+            }
+        });
+
+    }
+
+
+    @Override
+    public void initListener() {}
+
+    @Override
+    public void initData() {}
+
+
+    @OnClick({R.id.sign_rl_ljdl, R.id.sign_rl_lxdl})
+    public void onViewClicked(View view) {
+        switch (view.getId()) {
+            case R.id.sign_rl_ljdl:
+                signViewPager.setCurrentItem(0);
+                signRlLjdl.setBackgroundResource(R.drawable.shape_sign_rankings_left_hold);
+                signTvLjdl.setTextColor(ContextCompat.getColor(activity,R.color.white));
+                signRlLxdl.setBackgroundResource(R.drawable.shape_sign_rankings_right_normal);
+                signTvLxdl.setTextColor(ContextCompat.getColor(activity,R.color.black));
+
+
+                break;
+            case R.id.sign_rl_lxdl:
+                signViewPager.setCurrentItem(1);
+                signRlLjdl.setBackgroundResource(R.drawable.shape_sign_rankings_left_normal);
+                signTvLjdl.setTextColor(ContextCompat.getColor(activity,R.color.black));
+                signRlLxdl.setBackgroundResource(R.drawable.shape_sign_rankings_right_hold);
+                signTvLxdl.setTextColor(ContextCompat.getColor(activity,R.color.white));
+
+                break;
+        }
+    }
+}

+ 209 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/SignRecordAct.java

@@ -0,0 +1,209 @@
+package com.sheep.gamegroup.view.activity;
+
+import android.app.Activity;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.style.AbsoluteSizeSpan;
+import android.widget.TextView;
+
+import com.sheep.gamegroup.absBase.BaseActivity;
+import com.sheep.gamegroup.di.components.DaggerSignRecordComponent;
+import com.sheep.gamegroup.di.modules.SignRecordModule;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.model.entity.PunchLogEntity;
+import com.sheep.gamegroup.model.entity.StatisticsEntity;
+import com.sheep.gamegroup.presenter.SignRecordContract;
+import com.sheep.gamegroup.presenter.SignRecordPresenter;
+import com.sheep.gamegroup.view.adapter.expandadapter.RecyclerViewData;
+import com.sheep.gamegroup.view.adapter.expandadapter.SignRecordAdapter;
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.utils.G;
+import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import butterknife.BindView;
+
+/**
+ * 我的战绩
+ */
+
+public class SignRecordAct extends BaseActivity implements SignRecordContract.View {
+
+    Activity activity;
+    @Inject
+    SignRecordPresenter presenter;
+    @BindView(R.id.txt_baseactivity_title)
+    TextView txtBaseactivityTitle;
+    @BindView(R.id.sign_tv_record)
+    TextView signTvRecord;
+    @BindView(R.id.sign_tv_ljtr)
+    TextView signTvLjtr;
+    @BindView(R.id.sign_tv_ljjj)
+    TextView signTvLjjj;
+    @BindView(R.id.sign_tv_ljzq)
+    TextView signTvLjzq;
+    @BindView(R.id.recyclerview)
+    RecyclerView recyclerview;
+
+    private List<RecyclerViewData> mDatas;
+    private SignRecordAdapter adapter;
+
+    int index = 0;
+    Calendar calendar;
+
+    @Override
+    protected int getLayoutId() {
+        return R.layout.sign_record_layout;
+    }
+
+    @Override
+    public void initView() {
+        activity = this;
+        TitleBarUtils
+                .getInstance()
+                .setTitle(activity, "我的战绩")
+                .setTitleFinish(activity);
+        DaggerSignRecordComponent.builder()
+                .netComponent(SheepApp.get(this).getNetComponent())
+                .signRecordModule(new SignRecordModule(this))
+                .build()
+                .inject(this);
+        mDatas = new ArrayList<>();
+//        adapter = new SignRecordAdapter(activity, mDatas);
+        recyclerview.setLayoutManager(new LinearLayoutManager(activity));
+//        recyclerview.setAdapter(adapter);
+        calendar = Calendar.getInstance();
+        presenter.getStatistics();
+        presenter.getPunchLog(1);
+        presenter.getPunchLog(2);
+        presenter.getPunchLog(3);
+    }
+
+
+    @Override
+    public void initListener() {
+
+    }
+
+    @Override
+    public void initData() {
+
+
+        //test
+//        signTvRecord.setText(String.format(getString(R.string.sign_tv_srecord_money),"12","80"));
+//        signTvLjtr.setText(getSpannableString("10"));
+//        signTvLjjj.setText(getSpannableString("101"));
+//        signTvLjzq.setText(getSpannableString("11"));
+
+    }
+
+
+    @Override
+    public void succStatistics(BaseMessage o) {
+//        {"total_money":1,"continue_punch_count":1,"total_award":2.8,"total_punch_count":1}
+        StatisticsEntity statisticsEntity = o.getData(StatisticsEntity.class);
+
+        signTvRecord.setText(String.format(getString(R.string.sign_tv_srecord_money),statisticsEntity.getContinue_punch_count(),statisticsEntity.getTotal_punch_count()));
+        signTvLjtr.setText(getSpannableString(statisticsEntity.getTotal_money()));
+        signTvLjjj.setText(getSpannableString(statisticsEntity.getTotal_award()));
+        float zq = Float.valueOf(statisticsEntity.getTotal_award()) - Float.valueOf(statisticsEntity.getTotal_money());
+        signTvLjzq.setText(getSpannableString(""+ zq));
+    }
+
+    /**
+     * 打卡记录返回
+     * @param o
+     */
+    @Override
+    public void succPunchLog(BaseMessage o,int action) {
+        List<PunchLogEntity> list = o.getDatas(PunchLogEntity.class);
+        int month = calendar.get(Calendar.MONTH) + 1;
+        if(action == 1){
+            mDatas.add(action - 1,new RecyclerViewData(month + "月", list, true));
+        }else if(action == 2){
+            mDatas.add(action - 1,new RecyclerViewData((month - 1) + "月", list, false));
+        }else if(action == 3){
+            mDatas.add(action - 1,new RecyclerViewData((month - 2) + "月", list, false));
+        }
+        index ++;
+        if(index == 3){
+            adapter = new SignRecordAdapter(activity, mDatas);
+            recyclerview.setAdapter(adapter);
+        }
+    }
+
+    @Override
+    public void failStatistics(BaseMessage o) {
+        hideProgress();
+        G.showToast(o.getMsg());
+    }
+
+    @Override
+    public void failPunchLog(BaseMessage o) {
+        hideProgress();
+        G.showToast(o.getMsg());
+    }
+
+
+    private SpannableString getSpannableString(String price) {
+        String text = String.format(getString(R.string.sign_record_money),price);
+        SpannableString spannableString = new SpannableString(text);
+        spannableString.setSpan(new AbsoluteSizeSpan(14, true), text.length() - 1, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+        return spannableString;
+    }
+
+
+
+//    private void initBooks() {
+//        List<SignRecord> bean1 = new ArrayList<>();
+//        List<SignRecord> bean2 = new ArrayList<>();
+//        List<SignRecord> bean3 = new ArrayList<>();
+//        List<SignRecord> bean4 = new ArrayList<>();
+//        // id , pid , label , 其他属性
+//        bean1.add(new SignRecord("文件管理系统"));
+//        bean1.add(new SignRecord("游戏"));
+//        bean1.add(new SignRecord("文档"));
+//        bean1.add(new SignRecord("程序"));
+//        bean2.add(new SignRecord("war3"));
+//        bean2.add(new SignRecord("刀塔传奇"));
+//
+//        bean1.add(new SignRecord("面向对象"));
+//        bean2.add(new SignRecord("非面向对象"));
+//
+//        bean2.add(new SignRecord("C++"));
+//        bean2.add(new SignRecord("JAVA"));
+//        bean2.add(new SignRecord("Javascript"));
+//        bean2.add(new SignRecord("C"));
+//
+//        bean3.add(new SignRecord("文件管理系统"));
+//        bean3.add(new SignRecord("游戏"));
+//        bean4.add(new SignRecord("文档"));
+//        bean4.add(new SignRecord("程序"));
+//        bean4.add(new SignRecord("war3"));
+//        bean3.add(new SignRecord("刀塔传奇"));
+//
+//        bean3.add(new SignRecord("面向对象"));
+//        bean4.add(new SignRecord("非面向对象"));
+//
+//        bean3.add(new SignRecord("文件管理系统"));
+//        bean3.add(new SignRecord("游戏"));
+//        bean4.add(new SignRecord("文档"));
+//        bean4.add(new SignRecord("程序"));
+//        bean4.add(new SignRecord("war3"));
+//        bean4.add(new SignRecord("刀塔传奇"));
+//
+//        mDatas.add(new RecyclerViewData("分组0", bean1, true));
+//        mDatas.add(new RecyclerViewData("分组1", bean2, false));
+//        mDatas.add(new RecyclerViewData("分组2", bean3, false));
+//        mDatas.add(new RecyclerViewData("分组3", bean4, false));
+//    }
+
+}

+ 14 - 0
app/src/main/java/com/sheep/gamegroup/view/adapter/expandadapter/BaseItem.java

@@ -0,0 +1,14 @@
+package com.sheep.gamegroup.view.adapter.expandadapter;
+
+/**
+ * author:Drawthink
+ * describe:
+ * date: 2017/5/22
+ */
+
+public abstract class BaseItem {
+
+    public abstract boolean isParent();
+
+//    public abstract boolean isExpand();
+}

+ 328 - 0
app/src/main/java/com/sheep/gamegroup/view/adapter/expandadapter/BaseRecyclerViewAdapter.java

@@ -0,0 +1,328 @@
+package com.sheep.gamegroup.view.adapter.expandadapter;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.sheep.gamegroup.view.adapter.expandadapter.BaseViewHolder.VIEW_TYPE_CHILD;
+import static com.sheep.gamegroup.view.adapter.expandadapter.BaseViewHolder.VIEW_TYPE_PARENT;
+
+
+/**
+ * author:Drawthink
+ * describe:
+ * date: 2017/5/22
+ * T :group  data
+ * S :child  data
+ * VH :ViewHolder
+ */
+
+public abstract class BaseRecyclerViewAdapter<T,S,VH extends BaseViewHolder> extends RecyclerView.Adapter<VH> {
+
+    public static final String TAG = BaseRecyclerViewAdapter.class.getSimpleName();
+
+    private Context ctx;
+    /**
+     * all data
+     */
+    private List<RecyclerViewData> allDatas;
+    /**
+     * showing datas
+     */
+    private List showingDatas = new ArrayList<>();
+
+    /**
+     * child datas
+     */
+    private List<List<S>> childDatas;
+
+    private OnRecyclerViewListener.OnItemClickListener itemClickListener;
+    private OnRecyclerViewListener.OnItemLongClickListener itemLongClickListener;
+
+    public void setOnItemClickListener(OnRecyclerViewListener.OnItemClickListener listener) {
+        this.itemClickListener = listener;
+    }
+    public void setOnItemLongClickListener(OnRecyclerViewListener.OnItemLongClickListener longClickListener){
+        this.itemLongClickListener = longClickListener;
+    }
+
+    public BaseRecyclerViewAdapter(Context ctx, List<RecyclerViewData> datas) {
+        this.ctx = ctx;
+        this.allDatas = datas;
+        setShowingDatas();
+        this.notifyDataSetChanged();
+    }
+
+    public void setAllDatas(List<RecyclerViewData> allDatas) {
+        this.allDatas = allDatas;
+        setShowingDatas();
+        this.notifyDataSetChanged();
+    }
+
+    @Override
+    public int getItemCount() {
+        return null == showingDatas ? 0 : showingDatas.size();
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        if (showingDatas.get(position) instanceof GroupItem) {
+            return VIEW_TYPE_PARENT;
+        } else {
+            return VIEW_TYPE_CHILD;
+        }
+    }
+
+    @Override
+    public VH onCreateViewHolder(ViewGroup parent, int viewType) {
+        View view = null;
+        switch (viewType) {
+            case VIEW_TYPE_PARENT:
+                view = getGroupView(parent);
+                break;
+            case VIEW_TYPE_CHILD:
+                view = getChildView(parent);
+                break;
+        }
+        return createRealViewHolder(ctx, view, viewType);
+    }
+
+
+    @Override
+    public void onBindViewHolder(final VH holder, final int position) {
+        final Object item = showingDatas.get(position);
+        final int gp = getGroupPosition(position);
+        final int cp = getChildPosition(gp, position);
+        if (item != null && item instanceof GroupItem) {
+            onBindGroupHolder(holder,gp, position, (T) ((GroupItem) item).getGroupData(),((GroupItem) item).isExpand());
+            holder.groupView.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    if (null != itemClickListener) {
+                        itemClickListener.onGroupItemClick(position,gp, holder.groupView);
+                    }
+                    if (item instanceof GroupItem && ((GroupItem) item).isExpand()) {
+                        collapseGroup(position);
+                        notifyDataSetChanged();
+                    } else {
+                        expandGroup(position);
+                        notifyDataSetChanged();
+                    }
+
+                }
+            });
+
+
+            holder.groupView.setOnLongClickListener(new View.OnLongClickListener() {
+                @Override
+                public boolean onLongClick(View v) {
+                    if (null != itemLongClickListener) {
+                        itemLongClickListener.onGroupItemLongClick(position,gp, holder.groupView);
+                    }
+                    return true;
+                }
+            });
+        } else {
+            onBindChildpHolder(holder,gp,cp, position, (S) item);
+            holder.childView.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    if (null != itemClickListener) {
+                        itemClickListener.onChildItemClick(position,gp, cp, holder.childView);
+                    }
+                }
+            });
+            holder.childView.setOnLongClickListener(new View.OnLongClickListener() {
+                @Override
+                public boolean onLongClick(View v) {
+                    if (null != itemLongClickListener) {
+                        int gp = getGroupPosition(position);
+                        itemLongClickListener.onChildItemLongClick(position,gp,cp, holder.childView);
+                    }
+                    return true;
+                }
+            });
+        }
+    }
+
+
+    /**
+     * setup showing datas
+     */
+    private void setShowingDatas() {
+        if (null != showingDatas) {
+            showingDatas.clear();
+        }
+        if (this.childDatas == null) {
+            this.childDatas = new ArrayList<>();
+        }
+        childDatas.clear();
+        GroupItem groupItem;
+        for (int i = 0; i < allDatas.size(); i++) {
+            if (allDatas.get(i).getGroupItem() instanceof GroupItem) {
+                groupItem = allDatas.get(i).getGroupItem();
+            } else {
+                break;
+            }
+            childDatas.add(i, groupItem.getChildDatas());
+            showingDatas.add(groupItem);
+            if (null != groupItem && groupItem.hasChilds() && groupItem.isExpand()) {
+                showingDatas.addAll(groupItem.getChildDatas());
+            }
+        }
+    }
+
+    /**
+     * expandGroup
+     * @param position showingDatas position
+     */
+    private void expandGroup(int position) {
+        Object item = showingDatas.get(position);
+        if (null == item) {
+            return;
+        }
+        if (!(item instanceof GroupItem)) {
+            return;
+        }
+        if (((GroupItem) item).isExpand()) {
+            return;
+        }
+        if(!canExpandAll()){
+            for(int i=0;i<showingDatas.size();i++){
+                if(i != position){
+                    int tempPositino = collapseGroup(i);
+                    if(tempPositino != -1){
+                        position =  tempPositino;
+                    }
+                }
+            }
+        }
+
+        List<BaseItem> tempChilds;
+        if (((GroupItem) item).hasChilds()) {
+            tempChilds = ((GroupItem) item).getChildDatas();
+            ((GroupItem) item).onExpand();
+            if(canExpandAll()){
+                showingDatas.addAll(position + 1, tempChilds);
+                notifyItemRangeInserted(position+1,tempChilds.size());
+                notifyItemRangeChanged(position+1,showingDatas.size()-(position+1));
+            }else {
+                int tempPsi = showingDatas.indexOf(item);
+                showingDatas.addAll(tempPsi + 1, tempChilds);
+                notifyItemRangeInserted(tempPsi+1,tempChilds.size());
+                notifyItemRangeChanged(tempPsi+1,showingDatas.size()-(tempPsi+1));
+            }
+        }
+    }
+
+    /**
+     * collapseGroup
+     * @param position showingDatas position
+     */
+    private int collapseGroup(int position) {
+        Object item = showingDatas.get(position);
+        if (null == item) {
+            return -1;
+        }
+        if (!(item instanceof GroupItem)) {
+            return -1;
+        }
+        if (!((GroupItem) item).isExpand()) {
+            return -1;
+        }
+        int tempSize = showingDatas.size();
+        List<BaseItem> tempChilds;
+        if (((GroupItem) item).hasChilds()) {
+            tempChilds = ((GroupItem) item).getChildDatas();
+            ((GroupItem) item).onExpand();
+            showingDatas.removeAll(tempChilds);
+            notifyItemRangeRemoved(position+1,tempChilds.size());
+            notifyItemRangeChanged(position+1,tempSize-(position+1));
+            return position;
+        }
+        return -1;
+    }
+    /**
+     * @param position showingDatas position
+     * @return GroupPosition
+     */
+    private int getGroupPosition(int position) {
+        Object item = showingDatas.get(position);
+        if (item instanceof GroupItem) {
+            for (int j = 0; j < allDatas.size(); j++) {
+                if(allDatas.get(j).getGroupItem().equals(item)){
+                    return j;
+                }
+            }
+        }
+        for (int i = 0; i < childDatas.size(); i++) {
+            if (childDatas.get(i).contains(item)) {
+                return i;
+            }
+        }
+        return -1;
+    }
+    /**
+     * @param groupPosition
+     * @param showDataPosition
+     * @return ChildPosition
+     */
+    private int getChildPosition(int groupPosition, int showDataPosition) {
+        Object item = showingDatas.get(showDataPosition);
+        try {
+            return childDatas.get(groupPosition).indexOf(item);
+        } catch (IndexOutOfBoundsException ex) {
+            Log.e(TAG, ex.getMessage());
+        }
+        return 0;
+    }
+
+    /**
+     * return groupView
+     */
+    public abstract View getGroupView(ViewGroup parent);
+
+    /**
+     * return childView
+     */
+    public abstract View getChildView(ViewGroup parent);
+
+    /**
+     * return <VH extends BaseViewHolder> instance
+     */
+    public abstract VH createRealViewHolder(Context ctx, View view, int viewType);
+
+    /**
+     * onBind groupData to groupView
+     * @param holder
+     * @param position
+     */
+    public abstract void onBindGroupHolder(VH holder, int groupPos,int position,T groupData,boolean isExpand);
+    /**
+     * onBind childData to childView
+     * @param holder
+     * @param position
+     */
+    public abstract void onBindChildpHolder(VH holder, int groupPos,int childPos,int position,S childData);
+
+    /**
+     * if return true Allow all expand otherwise Only one can be expand at the same time
+     * */
+    public boolean canExpandAll() {
+        return true;
+    }
+
+    /**
+     * 对原数据进行增加删除,调用此方法进行notify
+     */
+    public void notifyRecyclerViewData(){
+        notifyDataSetChanged();
+        setShowingDatas();
+    }
+
+
+}

+ 42 - 0
app/src/main/java/com/sheep/gamegroup/view/adapter/expandadapter/BaseViewHolder.java

@@ -0,0 +1,42 @@
+package com.sheep.gamegroup.view.adapter.expandadapter;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.view.ViewGroup;
+
+
+public abstract class BaseViewHolder extends RecyclerView.ViewHolder {
+
+    public static final int VIEW_TYPE_PARENT = 1;
+    public static final int VIEW_TYPE_CHILD = 2;
+
+    public ViewGroup childView;
+
+    public ViewGroup groupView;
+
+    public BaseViewHolder(Context ctx, View itemView, int viewType) {
+        super(itemView);
+        switch (viewType) {
+            case VIEW_TYPE_PARENT:
+                groupView = (ViewGroup)itemView.findViewById(getGroupViewResId());
+                break;
+            case VIEW_TYPE_CHILD:
+                childView = (ViewGroup) itemView.findViewById(getChildViewResId());
+                break;
+        }
+    }
+
+    /**
+     * return ChildView root layout id
+     */
+    public abstract int getChildViewResId();
+
+    /**
+     * return GroupView root layout id
+     * */
+    public abstract int getGroupViewResId();
+
+
+}

+ 73 - 0
app/src/main/java/com/sheep/gamegroup/view/adapter/expandadapter/GroupItem.java

@@ -0,0 +1,73 @@
+package com.sheep.gamegroup.view.adapter.expandadapter;
+
+import java.util.List;
+
+/**
+ * author:Drawthink
+ * describe:
+ * date: 2017/5/22
+ * T 为group数据对象
+ * S 为child数据对象
+ */
+
+public class GroupItem<T,S> extends BaseItem{
+
+    /**head data*/
+    private T groupData;
+
+    /** childDatas*/
+    private List<S> childDatas;
+
+    /** 是否展开,  默认展开*/
+    private boolean isExpand = true;
+
+
+    /** 返回是否是父节点*/
+    @Override
+    public boolean isParent() {
+        return true;
+    }
+
+    public boolean isExpand(){
+        return isExpand;
+    }
+
+    public void setExpand(){
+        this.isExpand = false;
+    }
+
+    public void onExpand() {
+        isExpand = !isExpand;
+    }
+
+
+
+    public GroupItem(T groupData, List<S> childDatas, boolean isExpand) {
+        this.groupData = groupData;
+        this.childDatas = childDatas;
+        this.isExpand = isExpand;
+    }
+
+    public boolean hasChilds(){
+        if(getChildDatas() == null || getChildDatas().isEmpty() ){
+            return false;
+        }
+        return true;
+    }
+
+    public List<S> getChildDatas() {
+        return childDatas;
+    }
+
+    public void setChildDatas(List<S> childDatas) {
+        this.childDatas = childDatas;
+    }
+
+    public void removeChild(int childPosition){
+
+    }
+
+    public T getGroupData() {
+        return groupData;
+    }
+}

+ 33 - 0
app/src/main/java/com/sheep/gamegroup/view/adapter/expandadapter/OnRecyclerViewListener.java

@@ -0,0 +1,33 @@
+package com.sheep.gamegroup.view.adapter.expandadapter;
+
+import android.view.View;
+
+/**
+ * author:Drawthink
+ * describe:RecyclerViewListener
+ * date: 2017/5/22
+ */
+
+public interface OnRecyclerViewListener {
+
+    /**
+     * 单击事件
+     */
+    interface OnItemClickListener {
+        /** position 当前在列表中的position*/
+        void onGroupItemClick(int position, int groupPosition, View view);
+
+        void onChildItemClick(int position, int groupPosition, int childPosition, View view);
+    }
+
+    /**
+     * 双击事件
+     */
+    interface OnItemLongClickListener {
+        void onGroupItemLongClick(int position, int groupPosition, View view);
+
+        void onChildItemLongClick(int position, int groupPosition, int childPosition, View view);
+    }
+
+
+}

+ 50 - 0
app/src/main/java/com/sheep/gamegroup/view/adapter/expandadapter/RecyclerViewData.java

@@ -0,0 +1,50 @@
+package com.sheep.gamegroup.view.adapter.expandadapter;
+
+import java.util.List;
+
+/**
+ * T 为group数据对象
+ * S 为child数据对象
+ */
+
+public class RecyclerViewData<T,S>{
+
+    private GroupItem groupItem;
+
+    /**
+     * @param groupData
+     * @param childDatas
+     * @param isExpand   初始化展示数据时,该组数据是否展开
+     */
+    public RecyclerViewData(T groupData, List<S> childDatas,boolean isExpand) {
+        this.groupItem = new GroupItem(groupData,childDatas,isExpand);
+    }
+
+    public RecyclerViewData(T groupData, List<S> childDatas) {
+        this.groupItem = new GroupItem(groupData,childDatas,false);
+    }
+
+    public GroupItem getGroupItem() {
+        return groupItem;
+    }
+
+    public void setGroupItem(GroupItem groupItem) {
+        this.groupItem = groupItem;
+    }
+
+    public T getGroupData(){
+       return (T)groupItem.getGroupData();
+    }
+
+    public void removeChild(int position){
+        if(null == groupItem || !groupItem.hasChilds()){
+            return;
+        }
+        groupItem.getChildDatas().remove(position);
+    }
+
+    public S getChild(int childPosition){
+        return (S)groupItem.getChildDatas().get(childPosition);
+    }
+
+}

+ 93 - 0
app/src/main/java/com/sheep/gamegroup/view/adapter/expandadapter/SignRecordAdapter.java

@@ -0,0 +1,93 @@
+package com.sheep.gamegroup.view.adapter.expandadapter;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.style.AbsoluteSizeSpan;
+import android.text.style.ForegroundColorSpan;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.sheep.gamegroup.model.entity.PunchLogEntity;
+import com.sheep.jiuyan.samllsheep.R;
+
+import java.util.List;
+
+
+
+public class SignRecordAdapter extends BaseRecyclerViewAdapter<String, PunchLogEntity,SignRecordViewHolder> {
+
+    private Context ctx;
+    private LayoutInflater mInflater;
+
+    public SignRecordAdapter(Context ctx, List<RecyclerViewData> datas) {
+        super(ctx, datas);
+        mInflater = LayoutInflater.from(ctx);
+        this.ctx = ctx;
+    }
+
+    /**
+     * head View数据设置
+     * @param holder
+     * @param groupPos
+     * @param position
+     * @param groupData
+     */
+    @Override
+    public void onBindGroupHolder(SignRecordViewHolder holder, int groupPos, int position, String groupData,boolean isExpand) {
+        if(isExpand){
+            holder.sign_group_iv_course.setImageResource(R.drawable.sign_up_bg);
+        }else{
+            holder.sign_group_iv_course.setImageResource(R.drawable.sign_right_bg);
+        }
+        holder.sign_group_tv_title.setText(groupData);
+    }
+
+    /**
+     * child View数据设置
+     * @param holder
+     * @param groupPos
+     * @param childPos
+     * @param position
+     * @param childData
+     */
+    @Override
+    public void onBindChildpHolder(SignRecordViewHolder holder, int groupPos, int childPos, int position, PunchLogEntity childData) {
+        holder.sign_child_tv_text.setText(getSpannableString(childData.getAmount()));
+    }
+
+    @Override
+    public View getGroupView(ViewGroup parent) {
+        return mInflater.inflate(R.layout.sign_record_item_group,parent,false);
+    }
+
+    @Override
+    public View getChildView(ViewGroup parent) {
+        return mInflater.inflate(R.layout.sign_record_item_child,parent,false);
+    }
+
+    @Override
+    public SignRecordViewHolder createRealViewHolder(Context ctx, View view, int viewType) {
+        return new SignRecordViewHolder(ctx,view,viewType);
+    }
+
+    /**
+     * true 全部可展开
+     * fasle  同一时间只能展开一个
+     * */
+    @Override
+    public boolean canExpandAll() {
+        return false;
+    }
+
+    private SpannableString getSpannableString(String price) {
+        String text = String.format(ctx.getResources().getString(R.string.sign_record_item_money),price);
+        SpannableString spannableString = new SpannableString(text);
+        ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#ff0006"));
+        spannableString.setSpan(colorSpan, text.length() - 1 - price.length(), text.length() - 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+        return spannableString;
+    }
+
+}

+ 35 - 0
app/src/main/java/com/sheep/gamegroup/view/adapter/expandadapter/SignRecordViewHolder.java

@@ -0,0 +1,35 @@
+package com.sheep.gamegroup.view.adapter.expandadapter;
+
+import android.content.Context;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.sheep.jiuyan.samllsheep.R;
+
+
+public class SignRecordViewHolder extends BaseViewHolder {
+
+    public TextView sign_child_tv_time;
+    public TextView sign_child_tv_text;
+    public TextView sign_group_tv_title;
+    public ImageView sign_group_iv_course;
+
+    public SignRecordViewHolder(Context ctx, View itemView, int viewType) {
+        super(ctx,itemView, viewType);
+        sign_child_tv_time = (TextView) itemView.findViewById(R.id.sign_child_tv_time);
+        sign_child_tv_text = (TextView) itemView.findViewById(R.id.sign_child_tv_text);
+        sign_group_tv_title = (TextView)itemView.findViewById(R.id.sign_group_tv_title);
+        sign_group_iv_course = (ImageView)itemView.findViewById(R.id.sign_group_iv_course);
+    }
+
+    @Override
+    public int getGroupViewResId() {
+        return R.id.group;
+    }
+
+    @Override
+    public int getChildViewResId() {
+        return R.id.child;
+    }
+}

binární
app/src/main/res/drawable-xhdpi/sign_ljdk_bg.png


binární
app/src/main/res/drawable-xhdpi/sign_lxdk_bg.png


binární
app/src/main/res/drawable-xhdpi/sign_rankings_1.png


binární
app/src/main/res/drawable-xhdpi/sign_rankings_2.png


binární
app/src/main/res/drawable-xhdpi/sign_rankings_3.png


binární
app/src/main/res/drawable-xhdpi/sign_right_bg.png


binární
app/src/main/res/drawable-xhdpi/sign_up_bg.png


binární
app/src/main/res/drawable-xxhdpi/sign_band_bg.png


binární
app/src/main/res/drawable-xxhdpi/sign_ljdk_bg.png


binární
app/src/main/res/drawable-xxhdpi/sign_lxdk_bg.png


binární
app/src/main/res/drawable-xxhdpi/sign_rankings_1.png


binární
app/src/main/res/drawable-xxhdpi/sign_rankings_2.png


binární
app/src/main/res/drawable-xxhdpi/sign_rankings_3.png


binární
app/src/main/res/drawable-xxhdpi/sign_right_bg.png


binární
app/src/main/res/drawable-xxhdpi/sign_up_bg.png


+ 11 - 0
app/src/main/res/drawable/shape_blue_stroke_rectangle.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="11dp" />
+    <stroke
+        android:width="1dp"
+        android:color="@color/blue_end" />
+    <solid
+        android:color="#edfaff"
+        />
+</shape>

+ 9 - 0
app/src/main/res/drawable/shape_sign_rankings_left_hold.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:topLeftRadius="15dp" android:topRightRadius="0dp" android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
+
+    <solid
+        android:color="#fed459"
+        />
+</shape>

+ 9 - 0
app/src/main/res/drawable/shape_sign_rankings_left_normal.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:topLeftRadius="15dp" android:topRightRadius="0dp" android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
+
+    <solid
+        android:color="#ffe9a9"
+        />
+</shape>

+ 9 - 0
app/src/main/res/drawable/shape_sign_rankings_right_hold.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:topLeftRadius="0dp" android:topRightRadius="15dp" android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
+
+    <solid
+        android:color="#fed459"
+        />
+</shape>

+ 9 - 0
app/src/main/res/drawable/shape_sign_rankings_right_normal.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:topLeftRadius="0dp" android:topRightRadius="15dp" android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
+
+    <solid
+        android:color="#ffe9a9"
+        />
+</shape>

+ 48 - 0
app/src/main/res/layout/fgt_sign_rankings.xml

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/bg_write"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="31dp"
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="0.0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="排名"
+            android:textColor="#282828"
+            android:textSize="@dimen/text_size_12" />
+
+
+        <TextView
+            android:layout_width="0.0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="2"
+            android:gravity="center_vertical"
+            android:paddingLeft="@dimen/content_padding_10"
+            android:text="用户名称"
+            android:textColor="#282828"
+            android:textSize="@dimen/text_size_12" />
+
+        <TextView
+            android:layout_width="0.0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="天数"
+            android:textColor="#282828"
+            android:textSize="@dimen/text_size_12" />
+
+    </LinearLayout>
+
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/signRankings_RecyclerView"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+</LinearLayout>

+ 264 - 0
app/src/main/res/layout/sign_card_layout.xml

@@ -0,0 +1,264 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/bg_gray"
+    android:orientation="vertical">
+
+    <include layout="@layout/title" />
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:scrollbars="none">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center_horizontal"
+            android:orientation="vertical">
+
+            <RelativeLayout
+                android:layout_width="match_parent"
+                android:layout_height="378dp"
+                android:background="@drawable/sign_band_bg">
+
+                <TextView
+                    android:layout_width="223dp"
+                    android:layout_height="20dp"
+                    android:layout_centerHorizontal="true"
+                    android:layout_marginTop="@dimen/content_padding_10"
+                    android:background="@drawable/sp_search_edt_white"
+                    android:gravity="center"
+                    android:text="每日7:00-9:00成功打卡可平分金额"
+                    android:textColor="@color/setting_more"
+                    android:textSize="@dimen/text_size_12" />
+            </RelativeLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/content_padding_10"
+                android:layout_marginRight="@dimen/content_padding_10"
+                android:layout_marginTop="-126dp"
+                android:background="@drawable/x_shap_shadow_bg_rectgangle_white"
+                android:orientation="vertical"
+                android:paddingRight="@dimen/content_padding_10">
+
+                <TextView
+                    android:layout_width="123dp"
+                    android:layout_height="26dp"
+                    android:layout_gravity="center_horizontal"
+                    android:layout_marginTop="@dimen/content_padding_10"
+                    android:background="@drawable/sp_rectangle_bg_gray_radius"
+                    android:gravity="center"
+                    android:text="今日打卡情况"
+                    android:textColor="@color/content"
+                    android:textSize="@dimen/text_size_3" />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_horizontal"
+                    android:layout_marginTop="@dimen/content_padding_10"
+                    android:gravity="center"
+                    android:text="可平分奖池金额"
+                    android:textColor="@color/content"
+                    android:textSize="@dimen/text_size_12" />
+
+                <TextView
+                    android:id="@+id/sign_tv_kpf"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_horizontal"
+                    android:layout_marginTop="@dimen/content_padding_10"
+                    android:gravity="center"
+                    android:text="333300元"
+                    android:textColor="@color/red"
+                    android:textSize="@dimen/text_size_32" />
+
+                <TextView
+                    android:id="@+id/sign_tv_ljdk"
+                    android:layout_width="151dp"
+                    android:layout_height="32dp"
+                    android:layout_gravity="center_horizontal"
+                    android:layout_marginTop="10dp"
+                    android:background="@drawable/sp_bg_gradient_rectangle_yellow"
+                    android:clickable="true"
+                    android:gravity="center"
+                    android:text="立即打卡"
+                    android:textColor="@color/white"
+                    android:textSize="@dimen/text_size_15" />
+
+                <TextView
+                    android:id="@+id/sign_tv_jrcyrs"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_horizontal"
+                    android:layout_marginTop="@dimen/content_padding_15"
+                    android:layout_marginBottom="@dimen/content_padding_10"
+                    android:gravity="center"
+                    android:text="今日已有XX人参与打卡"
+                    android:textColor="#cc8e8e8e"
+                    android:textSize="@dimen/text_size_2" />
+
+            </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="@dimen/content_padding_10"
+                    android:layout_marginRight="@dimen/content_padding_10"
+                    android:layout_marginTop="10dp"
+                    android:background="@drawable/x_shap_shadow_bg_rectgangle_white"
+                    android:orientation="vertical"
+                    android:paddingRight="@dimen/content_padding_10">
+                <TextView
+                    android:layout_width="144dp"
+                    android:layout_height="26dp"
+                    android:layout_gravity="center_horizontal"
+                    android:layout_marginTop="@dimen/content_padding_10"
+                    android:background="@drawable/sp_rectangle_bg_gray_radius"
+                    android:gravity="center"
+                    android:text="今日参与打卡奖励"
+                    android:textColor="@color/content"
+                    android:textSize="@dimen/text_size_3" />
+
+                <TextView
+                    android:id="@+id/sign_tv_dkjl"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_horizontal"
+                    android:layout_marginTop="@dimen/content_padding_10"
+                    android:gravity="center"
+                    android:text="系统计算中/¥1.25"
+                    android:textColor="@color/content"
+                    android:textSize="@dimen/text_size_4" />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_horizontal"
+                    android:layout_marginTop="@dimen/content_padding_10"
+                    android:layout_marginBottom="15dp"
+                    android:layout_marginLeft="@dimen/content_padding_10"
+                    android:layout_marginRight="@dimen/content_padding_10"
+                    android:gravity="left"
+                    android:lineSpacingExtra="2dp"
+                    android:text="tips:奖励会于每日打卡活动截止后直接发放到个人账户中,因网络波动部分奖励到账可能会有延时,敬请谅解~"
+                    android:textColor="@color/content"
+                    android:textSize="@dimen/text_size_12" />
+
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/content_padding_10"
+                android:layout_marginRight="@dimen/content_padding_10"
+                android:layout_marginTop="@dimen/content_padding_10"
+                android:background="@drawable/x_shap_shadow_bg_rectgangle_white"
+                android:orientation="vertical"
+                android:paddingRight="@dimen/content_padding_10">
+
+                <TextView
+                    android:layout_width="123dp"
+                    android:layout_height="26dp"
+                    android:layout_gravity="center_horizontal"
+                    android:layout_marginTop="@dimen/content_padding_10"
+                    android:background="@drawable/sp_rectangle_bg_gray_radius"
+                    android:gravity="center"
+                    android:text="明日打开报名"
+                    android:textColor="@color/content"
+                    android:textSize="@dimen/text_size_3" />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_horizontal"
+                    android:layout_marginTop="@dimen/content_padding_10"
+                    android:gravity="center"
+                    android:text="可平分奖池金额"
+                    android:textColor="@color/content"
+                    android:textSize="@dimen/text_size_12" />
+
+                <TextView
+                    android:id="@+id/sign_tv_mrcyrs"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_horizontal"
+                    android:layout_marginTop="@dimen/content_padding_10"
+                    android:gravity="center"
+                    android:text="333300元"
+                    android:textColor="@color/red"
+                    android:textSize="@dimen/text_size_32" />
+
+                <TextView
+                    android:id="@+id/sign_tv_yybm"
+                    android:layout_width="151dp"
+                    android:layout_height="32dp"
+                    android:layout_gravity="center_horizontal"
+                    android:layout_marginTop="10dp"
+                    android:layout_marginBottom="@dimen/content_padding_10"
+                    android:background="@drawable/sp_bg_gradient_rectangle_yellow"
+                    android:clickable="true"
+                    android:gravity="center"
+                    android:text="一元报名"
+                    android:textColor="@color/white"
+                    android:textSize="@dimen/text_size_15" />
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="@dimen/content_padding_30"
+                android:layout_marginLeft="@dimen/content_padding_10"
+                android:layout_marginRight="@dimen/content_padding_10"
+                android:layout_marginTop="@dimen/content_padding_10"
+                android:background="@drawable/x_shap_shadow_bg_rectgangle_white"
+                android:orientation="vertical"
+                android:paddingRight="@dimen/content_padding_10">
+
+                <TextView
+                    android:layout_width="123dp"
+                    android:layout_height="26dp"
+                    android:layout_gravity="center_horizontal"
+                    android:layout_marginTop="@dimen/content_padding_10"
+                    android:background="@drawable/sp_rectangle_bg_gray_radius"
+                    android:gravity="center"
+                    android:text="活动说明"
+                    android:textColor="@color/content"
+                    android:textSize="@dimen/text_size_3" />
+
+                <TextView
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_horizontal"
+                    android:layout_marginTop="@dimen/content_padding_10"
+                    android:gravity="left"
+                    android:lineSpacingExtra="2dp"
+                    android:layout_marginRight="@dimen/content_padding_10"
+                    android:layout_marginLeft="@dimen/content_padding_10"
+                    android:text="@string/sign_card_text"
+                    android:textColor="@color/content"
+                    android:textSize="@dimen/text_size_3" />
+
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_horizontal"
+                    android:layout_marginTop="@dimen/content_padding_10"
+                    android:clickable="true"
+                    android:gravity="center"
+                    android:text="还有疑问?联系客服"
+                    android:layout_marginBottom="@dimen/content_padding_15"
+                    android:textColor="#262bfa"
+                    android:textSize="@dimen/text_size_12" />
+            </LinearLayout>
+
+        </LinearLayout>
+    </ScrollView>
+
+
+</LinearLayout>

+ 43 - 0
app/src/main/res/layout/sign_rankings_item.xml

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="40dp"
+    android:gravity="center_vertical"
+    android:orientation="horizontal">
+
+    <LinearLayout
+        android:layout_width="0.0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:gravity="center"
+        android:orientation="vertical">
+
+        <ImageView
+            android:id="@+id/sign_iv_icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@drawable/sign_rankings_1" />
+    </LinearLayout>
+
+    <TextView
+        android:id="@+id/sign_tv_name"
+        android:layout_width="0.0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="2"
+        android:gravity="center_vertical"
+        android:text="你是沸羊羊"
+        android:paddingLeft="@dimen/content_padding_10"
+        android:textColor="#cc282828"
+        android:textSize="@dimen/text_size_10" />
+
+    <TextView
+        android:id="@+id/sign_tv_pm"
+        android:layout_width="0.0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:gravity="center"
+        android:text="26"
+        android:textColor="#cc282828"
+        android:textSize="@dimen/text_size_10" />
+
+</LinearLayout>

+ 66 - 0
app/src/main/res/layout/sign_rankings_layout.xml

@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/bg_gray"
+    android:orientation="vertical">
+
+    <include layout="@layout/title" />
+
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="47dp"
+        android:orientation="horizontal"
+        android:layout_marginTop="@dimen/content_padding_10"
+        >
+
+        <RelativeLayout
+            android:id="@+id/sign_rl_ljdl"
+            android:layout_width="0.0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:background="@drawable/shape_sign_rankings_left_hold"
+            >
+
+            <TextView
+                android:id="@+id/sign_tv_ljdl"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_centerInParent="true"
+                android:drawableLeft="@drawable/sign_ljdk_bg"
+                android:drawablePadding="@dimen/content_padding_10"
+                android:text="累计打卡"
+                android:textColor="@color/white"
+                android:textSize="@dimen/text_size_3" />
+        </RelativeLayout>
+
+        <RelativeLayout
+            android:id="@+id/sign_rl_lxdl"
+            android:layout_width="0.0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:background="@drawable/shape_sign_rankings_right_normal"
+            >
+
+            <TextView
+                android:id="@+id/sign_tv_lxdl"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_centerInParent="true"
+                android:drawableLeft="@drawable/sign_lxdk_bg"
+                android:drawablePadding="@dimen/content_padding_10"
+                android:text="连续打卡"
+                android:textColor="@color/black"
+                android:textSize="@dimen/text_size_3" />
+        </RelativeLayout>
+    </LinearLayout>
+
+
+    <android.support.v4.view.ViewPager
+        android:id="@+id/sign_ViewPager"
+        android:layout_width="fill_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1" />
+
+</LinearLayout>

+ 27 - 0
app/src/main/res/layout/sign_record_item_child.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="40dp"
+    android:gravity="center_vertical"
+    android:paddingLeft="@dimen/content_padding_10"
+    android:paddingRight="@dimen/content_padding_10"
+    android:id="@+id/child">
+    <TextView
+        android:id="@+id/sign_child_tv_time"
+        android:layout_width="0.0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="0.8"
+        android:textSize="@dimen/text_size_10"
+        android:textColor="@color/content"
+        android:text="2010-04-25"/>
+
+    <TextView
+        android:id="@+id/sign_child_tv_text"
+        android:layout_width="0.0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1.2"
+        android:textSize="@dimen/text_size_10"
+        android:textColor="@color/content"
+        android:text="打卡成功,获得奖励1.25元"/>
+
+</LinearLayout>

+ 25 - 0
app/src/main/res/layout/sign_record_item_group.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:id="@+id/group"
+    android:background="@color/white">
+    <TextView
+        android:id="@+id/sign_group_tv_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textColor="@color/content"
+        android:padding="10dp"
+        android:layout_centerVertical="true"
+        android:text="4月"
+        android:textSize="@dimen/text_size_12"/>
+     <ImageView
+         android:layout_width="wrap_content"
+         android:layout_height="wrap_content"
+         android:layout_centerVertical="true"
+         android:id="@+id/sign_group_iv_course"
+         android:layout_alignParentRight="true"
+         android:layout_marginRight="@dimen/content_padding_10"
+         android:src="@mipmap/x_ic_next"
+         />
+</RelativeLayout>

+ 118 - 0
app/src/main/res/layout/sign_record_layout.xml

@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/bg_gray"
+    android:orientation="vertical">
+
+    <include layout="@layout/title" />
+
+    <TextView
+        android:id="@+id/sign_tv_record"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginTop="@dimen/content_padding_10"
+        android:gravity="center"
+        android:text="累计成功打卡23天,连续成功打卡7天"
+        android:textColor="@color/content"
+        android:textSize="@dimen/text_size_3" />
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="@dimen/content_padding_10"
+        android:layout_marginRight="@dimen/content_padding_10"
+        android:layout_marginTop="@dimen/content_padding_10"
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="0.0dp"
+            android:layout_height="22dp"
+            android:layout_weight="1"
+            android:background="@drawable/shape_blue_stroke_rectangle"
+            android:gravity="center"
+            android:text="累计投入"
+            android:textColor="@color/blue_end"
+            android:textSize="@dimen/text_size_12" />
+
+        <TextView
+            android:layout_width="0.0dp"
+            android:layout_height="22dp"
+            android:layout_marginLeft="30dp"
+            android:layout_weight="1"
+            android:background="@drawable/shape_blue_stroke_rectangle"
+            android:gravity="center"
+            android:text="累计奖金"
+            android:textColor="@color/blue_end"
+            android:textSize="@dimen/text_size_12" />
+
+        <TextView
+            android:layout_width="0.0dp"
+            android:layout_height="22dp"
+            android:layout_marginLeft="30dp"
+            android:layout_weight="1"
+            android:background="@drawable/shape_blue_stroke_rectangle"
+            android:gravity="center"
+            android:text="累计赚取"
+            android:textColor="@color/blue_end"
+            android:textSize="@dimen/text_size_12" />
+
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="@dimen/content_padding_10"
+        android:layout_marginRight="@dimen/content_padding_10"
+        android:layout_marginTop="@dimen/content_padding_10"
+        android:orientation="horizontal">
+
+        <TextView
+            android:id="@+id/sign_tv_ljtr"
+            android:layout_width="0.0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="10.25元"
+            android:textColor="@color/red"
+            android:textSize="@dimen/text_size_25" />
+
+        <TextView
+            android:id="@+id/sign_tv_ljjj"
+            android:layout_width="0.0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="30dp"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="10.25元"
+            android:textColor="@color/red"
+            android:textSize="@dimen/text_size_25" />
+
+        <TextView
+            android:id="@+id/sign_tv_ljzq"
+            android:layout_width="0.0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="30dp"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="10.25元"
+            android:textColor="@color/red"
+            android:textSize="@dimen/text_size_25" />
+
+    </LinearLayout>
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="40dp"
+        android:gravity="center_vertical"
+        android:layout_marginTop="@dimen/content_padding_10"
+        android:paddingLeft="@dimen/content_padding_10"
+        android:text="打卡记录"
+        android:textColor="@color/content"
+        android:textSize="@dimen/text_size_3" />
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/recyclerview"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="5dp" />
+</LinearLayout>

+ 9 - 0
app/src/main/res/values/strings.xml

@@ -30,4 +30,13 @@
     <string name="contact_qq_email">联系QQ/邮箱</string>
     <string name="input_notice_feedback">请留下您的联系方式,我们会不定期地给予优质建议提供丰厚奖励哦!</string>
     <string name="accessibility_desc">小绵羊任务</string>
+    <string name="sign_card_text">·每日00:00-23:59:00之间支付1元,即可有机会参与次日打卡活动;\n·次日凌晨07:00-09:00时间段参与打卡后,可平分前日奖金池内全部现金,
+    打卡失败则不可参与当日奖金分配;\n·每日平分金额于早9点后开始结算,系统将于12小时内发放到个人账户,因网络原因,部分用户
+    可能出现不及时到账的情况,可与我们客户联系,感谢您的谅解。\n·本活动最终解释权归橙风有量科技有限公司所有.</string>
+
+    <string name="sign_record_money">%s元</string>
+    <string name="sign_record_item_money">打卡成功,获得奖励%s元</string>
+    <string name="sign_tv_srecord_money">累计成功打卡%1$s天,连续成功打卡%2$s天</string>
+    <string name="sign_number">今日已有%1$s人参与打卡</string>
+    <string name="sign_jppj">系统计算中/¥%1$s</string>
 </resources>