Преглед на файлове

添加我的足迹界面接口(因为无数据,所以还差调试)

zengjiebin преди 7 години
родител
ревизия
784cefa47a
променени са 20 файла, в които са добавени 651 реда и са изтрити 151 реда
  1. 1 1
      app/src/main/AndroidManifest.xml
  2. 14 3
      app/src/main/java/com/sheep/gamegroup/model/api/ApiService.java
  3. 4 17
      app/src/main/java/com/sheep/gamegroup/model/entity/UserFocusLog.java
  4. 122 0
      app/src/main/java/com/sheep/gamegroup/model/entity/UserFootprint.java
  5. 2 2
      app/src/main/java/com/sheep/gamegroup/util/Jump2View.java
  6. 71 0
      app/src/main/java/com/sheep/gamegroup/util/string/SpannableSb.java
  7. 4 4
      app/src/main/java/com/sheep/gamegroup/util/viewHelper/LayoutParamsUtil.java
  8. 3 3
      app/src/main/java/com/sheep/gamegroup/view/activity/ActFootPrint.java
  9. 4 0
      app/src/main/java/com/sheep/gamegroup/view/activity/ActGcGameAppDetail.java
  10. 126 0
      app/src/main/java/com/sheep/gamegroup/view/customview/CalendarMonthView2.java
  11. 0 89
      app/src/main/java/com/sheep/gamegroup/view/fragment/FgtFootPrint.java
  12. 163 0
      app/src/main/java/com/sheep/gamegroup/view/fragment/FgtFootprint.java
  13. 1 1
      app/src/main/java/com/sheep/gamegroup/view/fragment/FgtPersonalCenter.java
  14. 2 2
      app/src/main/java/org/afinal/simplecache/ApiKey.java
  15. 15 0
      app/src/main/res/drawable/layer_triangle_black.xml
  16. 15 0
      app/src/main/res/drawable/layer_triangle_db.xml
  17. 6 0
      app/src/main/res/drawable/selector_tab_triangle_black_db.xml
  18. 5 7
      app/src/main/res/layout/act_gc_game_app_detail.xml
  19. 91 21
      app/src/main/res/layout/header_foot_print.xml
  20. 2 1
      app/src/main/res/layout/item_my_list_but.xml

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

@@ -791,7 +791,7 @@
             android:screenOrientation="portrait" />
         <!-- 小绵羊3.4.5 足迹  -->
         <activity
-            android:name="com.sheep.gamegroup.view.activity.ActFootPrint"
+            android:name="com.sheep.gamegroup.view.activity.ActFootprint"
             android:screenOrientation="portrait" />
     </application>
 

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

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.sheep.gamegroup.absBase.IHomePageSearch;
 import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.model.entity.UserFootprint;
 
 import org.afinal.simplecache.ApiKey;
 
@@ -1440,9 +1441,19 @@ public interface ApiService {
 //---------------------------start 小绵羊3.4.5 足迹-------------------------------------
 
     /**
-     * 小绵羊3.4.5 足迹
+     * 添加用户足迹/用户浏览记录
+     * UserFootprint
      */
-    @GET(ApiKey.getFootMark)
-    Observable<BaseMessage> getFootMark(@Query("page") int page, @Query("per_page") int per_page);
+    @POST("app/user/add_user_footprint")
+    Observable<BaseMessage> postUserAddUserFootPrint(@Body UserFootprint UserFootprint);
+    /**
+     * 小绵羊3.4.5
+     * 查询足迹/我的足迹
+     * page * integer (query) 页码
+     * per_page * integer (query) 每页显示条数默认10条
+     * date string (query) 日期,如: 2018-11-11
+     */
+    @GET(ApiKey.getUserFootPrintList)
+    Observable<BaseMessage> getUserFootPrintList(@Query("page") int page, @Query("per_page") int per_page, @Query("date") String date);
 //---------------------------end 小绵羊3.4.5 足迹-------------------------------------
 }

+ 4 - 17
app/src/main/java/com/sheep/gamegroup/model/entity/UserFocusLog.java

@@ -8,6 +8,7 @@ import android.text.style.ForegroundColorSpan;
 
 import com.sheep.gamegroup.absBase.AbsFocus;
 import com.sheep.gamegroup.util.ResourceUtils;
+import com.sheep.gamegroup.util.string.SpannableSb;
 import com.sheep.jiuyan.samllsheep.R;
 
 import java.util.Locale;
@@ -124,22 +125,8 @@ public class UserFocusLog extends AbsFocus {
     }
 
     public CharSequence getInfo() {
-        if (nickname == null) {
-            return user_type;
-        }
-        if (user_type == null) {
-            return "";
-        }
-        String content = String.format(Locale.CHINA, "%s\n%s", nickname, user_type);
-        SpannableStringBuilder spannableString = new SpannableStringBuilder();
-        spannableString.append(content);
-        int start = nickname.length();
-        int end = content.length();
-        AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(ResourceUtils.getXmlDef(R.dimen.sp_12), true);
-        spannableString.setSpan(absoluteSizeSpan, start, end, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
-        ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#999999"));
-        spannableString.setSpan(colorSpan, start, end, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
-
-        return spannableString;
+        return new SpannableSb().append(nickname).checkAndBr()
+                .append(user_type, R.dimen.text_size_12, "#999999")
+                .getSsb();
     }
 }

+ 122 - 0
app/src/main/java/com/sheep/gamegroup/model/entity/UserFootprint.java

@@ -0,0 +1,122 @@
+package com.sheep.gamegroup.model.entity;
+
+import com.kfzs.duanduan.utils.NumberFormatUtils;
+import com.sheep.gamegroup.util.string.SpannableSb;
+import com.sheep.jiuyan.samllsheep.R;
+
+import java.util.Locale;
+
+/**
+ * Created by realicing on 2018/11/23.
+ * realicing@sina.com
+ * 用户足迹
+ * <p>
+ * bonus:	number ($double)
+ * 任务奖金
+ * created_at:	integer ($int64)
+ * 创建时间
+ * id:	integer ($int64)
+ * 主键自增ID
+ * name:	string
+ * 展示标题名字
+ * pic:	string
+ * 展示图片地址
+ * relation_id:	integer ($int64)
+ * 关联表ID,根据不同type关联不同表
+ * stop_time:	integer ($int64)
+ * 页面停留时间
+ * type:	integer ($int32)
+ * 足迹类型 1:游戏,应用 2:任务 3:咨询
+ * update_at:	integer ($int64)
+ * 更新时间
+ * user_id:	integer ($int64)
+ * 用户ID
+ */
+public class UserFootprint {
+    private float bonus;
+
+    private int created_at;
+
+    private int id;
+
+    private String name;
+
+    private String pic;
+
+    private int relation_id;
+
+    private int stop_time;
+
+    private int type;
+
+    private int update_at;
+
+    private int user_id;
+
+    public void setBonus(float bonus){
+        this.bonus = bonus;
+    }
+    public float getBonus(){
+        return this.bonus;
+    }
+    public void setCreated_at(int created_at){
+        this.created_at = created_at;
+    }
+    public int getCreated_at(){
+        return this.created_at;
+    }
+    public void setId(int id){
+        this.id = id;
+    }
+    public int getId(){
+        return this.id;
+    }
+    public void setName(String name){
+        this.name = name;
+    }
+    public String getName(){
+        return this.name;
+    }
+    public void setPic(String pic){
+        this.pic = pic;
+    }
+    public String getPic(){
+        return this.pic;
+    }
+    public void setRelation_id(int relation_id){
+        this.relation_id = relation_id;
+    }
+    public int getRelation_id(){
+        return this.relation_id;
+    }
+    public void setStop_time(int stop_time){
+        this.stop_time = stop_time;
+    }
+    public int getStop_time(){
+        return this.stop_time;
+    }
+    public void setType(int type){
+        this.type = type;
+    }
+    public int getType(){
+        return this.type;
+    }
+    public void setUpdate_at(int update_at){
+        this.update_at = update_at;
+    }
+    public int getUpdate_at(){
+        return this.update_at;
+    }
+    public void setUser_id(int user_id){
+        this.user_id = user_id;
+    }
+    public int getUser_id(){
+        return this.user_id;
+    }
+
+    public CharSequence getInfo() {
+        return new SpannableSb().append(name, R.dimen.text_size_15, "#333333").checkAndBr()
+                .append(String.format(Locale.CHINA, "+%s元", NumberFormatUtils.retainMost2(bonus)), R.dimen.text_size_15, "#FD2D54")
+                .getSsb();
+    }
+}

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

@@ -52,7 +52,7 @@ import com.sheep.gamegroup.view.activity.ActCreditCardTaskList;
 import com.sheep.gamegroup.view.activity.ActCreditCardWeb;
 import com.sheep.gamegroup.view.activity.ActDownloadWelfareList;
 import com.sheep.gamegroup.view.activity.ActExchangeCMCC;
-import com.sheep.gamegroup.view.activity.ActFootPrint;
+import com.sheep.gamegroup.view.activity.ActFootprint;
 import com.sheep.gamegroup.view.activity.ActGameAccount;
 import com.sheep.gamegroup.view.activity.ActGameAgencyRecharge;
 import com.sheep.gamegroup.view.activity.ActGameCenter;
@@ -2276,7 +2276,7 @@ public class Jump2View {
      */
     public void goActFootPrint() {
         Activity activity = ActivityManager.getInstance().currentActivity();
-        Intent intent = new Intent(activity, ActFootPrint.class);
+        Intent intent = new Intent(activity, ActFootprint.class);
         activity.startActivity(intent);
     }
 }

+ 71 - 0
app/src/main/java/com/sheep/gamegroup/util/string/SpannableSb.java

@@ -0,0 +1,71 @@
+package com.sheep.gamegroup.util.string;
+
+import android.graphics.Color;
+import android.support.annotation.DimenRes;
+import android.text.Spannable;
+import android.text.SpannableStringBuilder;
+import android.text.TextUtils;
+import android.text.style.AbsoluteSizeSpan;
+import android.text.style.ForegroundColorSpan;
+
+import com.sheep.gamegroup.util.ResourceUtils;
+
+/**
+ * Created by realicing on 2018/11/23.
+ * realicing@sina.com
+ * 用于TextView,方便使用SpannableStringBuilder,来设置文本,颜色等--开发中
+ */
+public class SpannableSb {
+    private SpannableStringBuilder ssb = new SpannableStringBuilder();
+    private int start;
+    private int end;
+
+    public SpannableSb append(String text) {
+        if(TextUtils.isEmpty(text)){
+            return this;
+        }
+        ssb.append(text);
+        start = end;
+        end += text.length();
+        return this;
+    }
+
+    //前面有内容才换行
+    public SpannableSb checkAndBr() {
+        if(TextUtils.isEmpty(ssb)){
+            return this;
+        }
+        return append("\n");
+    }
+    //换行
+    public SpannableSb br() {
+        return append("\n");
+    }
+
+    public SpannableSb setTextSize(@DimenRes int textSize) {
+        //AbsoluteSizeSpan 参数 dip: size单位为px,true;size单位为dip(默认为false)。
+        AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(ResourceUtils.getXmlDef(textSize), true);
+        ssb.setSpan(absoluteSizeSpan, start, end, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
+        return this;
+    }
+
+    public SpannableSb setTextColor(String textColor) {
+        ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor(textColor));
+        ssb.setSpan(colorSpan, start, end, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
+        return this;
+    }
+    public SpannableSb append(String text, @DimenRes int textSize) {
+        return append(text).setTextSize(textSize);
+    }
+    public SpannableSb append(String text, String textColor) {
+        return append(text).setTextColor(textColor);
+    }
+    public SpannableSb append(String text, @DimenRes int textSize, String textColor) {
+        return append(text).setTextSize(textSize).setTextColor(textColor);
+    }
+
+
+    public SpannableStringBuilder getSsb() {
+        return ssb;
+    }
+}

+ 4 - 4
app/src/main/java/com/sheep/gamegroup/util/viewHelper/LayoutParamsUtil.java

@@ -27,18 +27,18 @@ public class LayoutParamsUtil {
             if (lp.getLeftMargin() != Lp.NONE)
                 ((RelativeLayout.LayoutParams) layoutParams).leftMargin = lp.getLeftMargin();
             if (lp.getBottomMargin() != Lp.NONE)
-                ((RelativeLayout.LayoutParams) layoutParams).topMargin = lp.getBottomMargin();
+                ((RelativeLayout.LayoutParams) layoutParams).bottomMargin = lp.getBottomMargin();
             if (lp.getRightMargin() != Lp.NONE)
-                ((RelativeLayout.LayoutParams) layoutParams).leftMargin = lp.getRightMargin();
+                ((RelativeLayout.LayoutParams) layoutParams).rightMargin = lp.getRightMargin();
         } else if (layoutParams instanceof LinearLayout.LayoutParams) {
             if (lp.getTopMargin() != Lp.NONE)
                 ((LinearLayout.LayoutParams) layoutParams).topMargin = lp.getTopMargin();
             if (lp.getLeftMargin() != Lp.NONE)
                 ((LinearLayout.LayoutParams) layoutParams).leftMargin = lp.getLeftMargin();
             if (lp.getBottomMargin() != Lp.NONE)
-                ((LinearLayout.LayoutParams) layoutParams).topMargin = lp.getBottomMargin();
+                ((LinearLayout.LayoutParams) layoutParams).bottomMargin = lp.getBottomMargin();
             if (lp.getRightMargin() != Lp.NONE)
-                ((LinearLayout.LayoutParams) layoutParams).leftMargin = lp.getRightMargin();
+                ((LinearLayout.LayoutParams) layoutParams).rightMargin = lp.getRightMargin();
         }
     }
 }

+ 3 - 3
app/src/main/java/com/sheep/gamegroup/view/activity/ActFootPrint.java

@@ -3,18 +3,18 @@ package com.sheep.gamegroup.view.activity;
 import android.support.v4.app.Fragment;
 
 import com.sheep.gamegroup.absBase.BaseContainerActivity;
-import com.sheep.gamegroup.view.fragment.FgtFootPrint;
+import com.sheep.gamegroup.view.fragment.FgtFootprint;
 
 /**
  * Created by realicing on 2018/9/11.
  * realicing@sina.com
  * 小绵羊3.4.5新增--足迹
  */
-public class ActFootPrint extends BaseContainerActivity {
+public class ActFootprint extends BaseContainerActivity {
 
     @Override
     protected Fragment initFragment() {
-        return new FgtFootPrint();
+        return new FgtFootprint();
     }
 
 }

+ 4 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/ActGcGameAppDetail.java

@@ -89,6 +89,8 @@ public class ActGcGameAppDetail extends BaseActivity {
     ImageView gc_game_app_detail_play_iv;
     @BindView(R.id.gc_game_app_detail_icon)
     ImageView gc_game_app_detail_icon;
+    @BindView(R.id.write_comment)
+    ImageView write_comment;
     @BindView(R.id.gc_game_app_detail_bt1)
     TextView gc_game_app_detail_bt1;
     @BindView(R.id.gc_game_app_detail_name)
@@ -137,6 +139,8 @@ public class ActGcGameAppDetail extends BaseActivity {
             }
         });
         RefreshUtil.newInstance().publicParameterLoadMore(refresh, this);
+
+        ViewUtil.setImage(write_comment, ViewUtil.getNetImgByName("write_comment"));
     }
 
     private List<GameListTag> tagList = ListUtil.emptyList();

+ 126 - 0
app/src/main/java/com/sheep/gamegroup/view/customview/CalendarMonthView2.java

@@ -0,0 +1,126 @@
+package com.sheep.gamegroup.view.customview;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.text.TextUtils;
+
+import com.haibin.calendarview.Calendar;
+import com.haibin.calendarview.MonthView;
+import com.sheep.gamegroup.util.LogUtil;
+
+import java.util.Locale;
+
+/**
+ * Created by realicing on 2018/9/12.
+ * realicing@sina.com
+ * 不要删除这个文件,否则不能正常运行,其在布局文件中有隐性引用
+ */
+public class CalendarMonthView2 extends MonthView {
+
+    private Paint mTextPaint = new Paint();
+    private Paint mCurDayPaint = new Paint();
+    private Paint mSolarTermTextPaint = new Paint();
+    private Paint mSchemeBasicPaint = new Paint();
+    private float mPadding;
+//    private float mRadio;
+//    private float mSchemeBaseLine;
+
+    public CalendarMonthView2(Context context) {
+        super(context);
+        this.mTextPaint.setTextSize((float) dipToPx(context, 8.0F));
+        this.mTextPaint.setColor(-1);
+        this.mTextPaint.setAntiAlias(true);
+        this.mTextPaint.setFakeBoldText(true);
+        this.mSchemeBasicPaint.setAntiAlias(true);
+        this.mSchemeBasicPaint.setStyle(Paint.Style.FILL);
+        this.mSchemeBasicPaint.setTextAlign(Paint.Align.CENTER);
+        this.mSchemeBasicPaint.setFakeBoldText(true);
+        this.mCurDayPaint.setAntiAlias(true);
+        this.mCurDayPaint.setStyle(Paint.Style.FILL);
+        this.mCurDayPaint.setTextAlign(Paint.Align.CENTER);
+        this.mCurDayPaint.setColor(Color.parseColor("#50CFCFCF"));
+        this.mCurDayPaint.setFakeBoldText(true);
+        this.mSolarTermTextPaint.setTextAlign(Paint.Align.CENTER);
+        this.mSolarTermTextPaint.setColor(Color.parseColor("#4889FF"));
+        this.mSolarTermTextPaint.setTextSize(mCurMonthTextPaint.getTextSize());
+        this.mPadding = dipToPx(this.getContext(), 4.0F);
+//        this.mRadio = (float) dipToPx(this.getContext(), 7.0F);
+//        Paint.FontMetrics metrics = this.mSchemeBasicPaint.getFontMetrics();
+//        this.mSchemeBaseLine = this.mRadio - metrics.descent + (metrics.bottom - metrics.top) / 2.0F + (float) dipToPx(this.getContext(), 1.0F);
+    }
+
+    protected boolean onDrawSelected(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme) {
+        this.mSelectedPaint.setStyle(Paint.Style.FILL);
+//        canvas.drawRect((float) (x + this.mPadding), (float) (y + this.mPadding), (float) (x + this.mItemWidth - this.mPadding), (float) (y + this.mItemHeight - this.mPadding), this.mSelectedPaint);
+        canvas.drawCircle(x + this.mItemWidth / 2.0F, y + this.mItemHeight / 2.0F, (Math.min(this.mItemHeight, this.mItemWidth) - this.mPadding) / 2.0F, this.mSelectedPaint);
+        return true;
+    }
+
+    protected void onDrawScheme(Canvas canvas, Calendar calendar, int x, int y) {
+        this.mSchemeBasicPaint.setColor(calendar.getSchemeColor());
+//        canvas.drawRect((float) (x + this.mPadding), (float) (y + this.mPadding), (float) (x + this.mItemWidth - this.mPadding), (float) (y + this.mItemHeight - this.mPadding), this.mSchemeBasicPaint);
+        canvas.drawRect((float) (x), y - this.mPadding / 2.0F, x + this.mItemWidth + (calendar.getWeek() == 0 ? this.mPadding : 0), y + this.mItemHeight - this.mPadding / 2.0F, this.mSchemeBasicPaint);
+//        canvas.drawRoundRect((float) (x + this.mPadding), (float) (y + this.mPadding), (float) (x + this.mItemWidth - this.mPadding), (float) (y + this.mItemHeight - this.mPadding), this.mSchemeBasicPaint);
+//        canvas.drawText(calendar.getScheme(), (float) (x + this.mItemWidth - this.mPadding) - this.mRadio / 2.0F - this.getTextWidth(calendar.getScheme()) / 2.0F, (float) (y + this.mPadding) + this.mSchemeBaseLine, this.mTextPaint);
+    }
+
+    private float getTextWidth(String text) {
+        return this.mTextPaint.measureText(text);
+    }
+
+    protected void onDrawText(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme, boolean isSelected) {
+        int cx = x + this.mItemWidth / 2;
+        int top = y - this.mItemHeight / 6;
+        boolean isCurrentDay = calendar.isCurrentDay();
+        if (isCurrentDay) {
+            onDrawCurDay(canvas, calendar, x, y, hasScheme);
+        }
+        /*if (isSelected && !isCurrentDay) {
+            canvas.drawText(String.valueOf(calendar.getDay()), (float) cx, this.mTextBaseLine + (float) top, this.mSelectTextPaint);
+            canvas.drawText(calendar.getLunar(), (float) cx, this.mTextBaseLine + (float) y + (float) (this.mItemHeight / 10), this.mSelectedLunarTextPaint);
+        } else */
+        Paint textPaint = this.mCurMonthTextPaint;
+        Paint lunarTextPaint = this.mCurMonthLunarTextPaint;
+        if(isSelected) {
+            textPaint = this.mSelectTextPaint;
+            lunarTextPaint = this.mSelectedLunarTextPaint;
+        } else if(calendar.isCurrentDay()){//当天
+            textPaint = this.mCurDayTextPaint;
+            lunarTextPaint = this.mCurDayLunarTextPaint;
+        } else if(hasScheme){//标记的
+            textPaint = this.mSchemeTextPaint;
+            lunarTextPaint = this.mSchemeLunarTextPaint;
+        } else if(!TextUtils.isEmpty(calendar.getSolarTerm())){//农历节庆
+            textPaint = this.mSolarTermTextPaint;
+            lunarTextPaint = this.mSolarTermTextPaint;
+        }
+        if(calendar.getDay() == 1){
+            canvas.drawText(String.format(Locale.CHINA, "%d月", calendar.getMonth()), (float) cx, this.mTextBaseLine + (float) top, textPaint);
+        } else {
+            canvas.drawText(String.valueOf(calendar.getDay()), (float) cx, this.mTextBaseLine + (float) top, textPaint);
+        }
+        canvas.drawText(calendar.isCurrentDay() ? "今天" : calendar.getLunar(), (float) cx, this.mTextBaseLine + (float) y + (float) (this.mItemHeight / 10), lunarTextPaint);
+
+    }
+
+    //画当天背景
+    protected void onDrawCurDay(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme) {
+//        this.mCurDayPaint.setStyle(Paint.Style.STROKE);
+//        canvas.drawCircle(x + this.mItemWidth / 2.0F, y + this.mItemHeight / 2.0F, (Math.min(this.mItemHeight, this.mItemWidth) - this.mPadding) / 2.0F, this.mCurDayPaint);
+//        canvas.drawRect((float) (x + this.mPadding), (float) (y + this.mPadding), (float) (x + this.mItemWidth - this.mPadding), (float) (y + this.mItemHeight - this.mPadding), this.mCurDayPaint);
+    }
+
+    /**
+     * dp转px
+     *
+     * @param context context
+     * @param dpValue dp
+     * @return px
+     */
+    static int dipToPx(Context context, float dpValue) {
+        final float scale = context.getResources().getDisplayMetrics().density;
+        return (int) (dpValue * scale + 0.5f);
+    }
+}

+ 0 - 89
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtFootPrint.java

@@ -1,89 +0,0 @@
-package com.sheep.gamegroup.view.fragment;
-
-import android.support.v7.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.haibin.calendarview.CalendarView;
-import com.kfzs.appstore.utils.adapter.recyclerview.RecyclerViewAdapter;
-import com.kfzs.appstore.utils.adapter.recyclerview.ViewHolder;
-import com.sheep.gamegroup.model.api.ApiService;
-import com.sheep.gamegroup.model.entity.BaseMessage;
-import com.sheep.gamegroup.model.entity.PunchLog;
-import com.sheep.gamegroup.util.ViewUtil;
-import com.sheep.jiuyan.samllsheep.R;
-import com.sheep.jiuyan.samllsheep.SheepApp;
-import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
-
-import org.afinal.simplecache.ApiKey;
-
-import java.util.Locale;
-
-import io.reactivex.Observable;
-
-/**
- * Created by realicing on 2018/9/17.
- * realicing@sina.com
- * 小绵羊3.4.5新增--足迹
- */
-public class FgtFootPrint extends BaseListFragment2<PunchLog> {
-    CalendarView calendarView;
-
-    @Override
-    public void initView() {
-        TitleBarUtils
-                .getInstance()
-                .setTitleFinish(getView(), activity)
-                .setTitle(getView(), "足迹");
-        per_page = 100;
-        view_list.setNestedScrollingEnabled(false);
-        View view = LayoutInflater.from(activity).inflate(R.layout.header_foot_print, null);
-        view_list.addHeaderView(view);
-        calendarView = view.findViewById(R.id.calendarView);
-    }
-
-    @Override
-    public void initListener() {
-        super.initListener();
-        calendarView.setOnMonthChangeListener(new CalendarView.OnMonthChangeListener() {
-            @Override
-            public void onMonthChange(int year, int month) {
-                if (isNoMore()) {
-                    return;
-                }
-                loadMoreData();
-            }
-        });
-    }
-
-    @Override
-    protected RecyclerView.Adapter getAdapter() {
-        return new RecyclerViewAdapter<PunchLog>(SheepApp.getInstance(), R.layout.item_my_focus, list) {
-            @Override
-            public void convert(ViewHolder holder, PunchLog item, int position) {
-                ImageView item_my_focus_iv = holder.itemView.findViewById(R.id.item_my_focus_iv);
-                TextView item_my_focus_info_tv = holder.itemView.findViewById(R.id.item_my_focus_info_tv);
-                TextView item_my_focus_tv = holder.itemView.findViewById(R.id.item_my_focus_tv);
-                ViewUtil.setVisibility(item_my_focus_tv, false);
-            }
-        };
-    }
-
-    @Override
-    protected String getKey(int page, int per_page) {
-        return String.format(Locale.CHINA, "%s?page=%d&per_page=%d", ApiKey.getFootMark, page, per_page);
-    }
-
-    @Override
-    protected Observable<BaseMessage> getApi(ApiService apiService) {
-        return apiService.getFootMark(page, per_page);
-    }
-
-    @Override
-    protected Class<PunchLog> getTClass() {
-        return PunchLog.class;
-    }
-
-}

+ 163 - 0
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtFootprint.java

@@ -0,0 +1,163 @@
+package com.sheep.gamegroup.view.fragment;
+
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.haibin.calendarview.Calendar;
+import com.haibin.calendarview.CalendarView;
+import com.kfzs.appstore.utils.adapter.recyclerview.RecyclerViewAdapter;
+import com.kfzs.appstore.utils.adapter.recyclerview.ViewHolder;
+import com.sheep.gamegroup.model.api.ApiService;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.model.entity.Lp;
+import com.sheep.gamegroup.model.entity.UserFocusLog;
+import com.sheep.gamegroup.model.entity.UserFootprint;
+import com.sheep.gamegroup.util.ViewUtil;
+import com.sheep.gamegroup.util.viewHelper.LayoutParamsUtil;
+import com.sheep.gamegroup.view.customview.CalendarMonthView2;
+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 org.afinal.simplecache.ApiKey;
+
+import java.util.List;
+import java.util.Locale;
+
+import io.reactivex.Observable;
+
+/**
+ * Created by realicing on 2018/9/17.
+ * realicing@sina.com
+ * 小绵羊3.4.5新增--足迹
+ */
+public class FgtFootprint extends BaseListFragment2<UserFootprint> {
+    private CalendarView calendarView;
+    private TextView header_foot_print_date_tv;
+    private ImageView header_foot_print_last_iv;
+    private View header_foot_print_last_v;
+    private ImageView header_foot_print_next_iv;
+    private View header_foot_print_next_v;
+
+    @Override
+    public void initView() {
+        //添加 CalendarMonthView2 的引用,防止无引用,导致误删该类
+        CalendarMonthView2.class.getSimpleName();
+        TitleBarUtils
+                .getInstance()
+                .setTitleFinish(getView(), activity)
+                .setTitle(getView(), "足迹");
+        LayoutParamsUtil.resetLayoutParams(empty_view, new Lp().setTopMargin(G.getRealPix(320)));
+        LayoutParamsUtil.resetLayoutParams(empty_view.findViewById(R.id.empty_view_msg), new Lp().setBottomMargin(0).setTopMargin(20));
+        per_page = 100;
+        view_list.setNestedScrollingEnabled(false);
+        View view = LayoutInflater.from(activity).inflate(R.layout.header_foot_print, null);
+        view_list.addHeaderView(view);
+        calendarView = view.findViewById(R.id.calendarView);
+        header_foot_print_date_tv = view.findViewById(R.id.header_foot_print_date_tv);
+        header_foot_print_last_iv = view.findViewById(R.id.header_foot_print_last_iv);
+        header_foot_print_last_v = view.findViewById(R.id.header_foot_print_last_v);
+        header_foot_print_next_iv = view.findViewById(R.id.header_foot_print_next_iv);
+        header_foot_print_next_v = view.findViewById(R.id.header_foot_print_next_v);
+        maxYear = calendarView.getCurYear();
+        maxYearMonth = calendarView.getCurMonth();
+        maxYearDay = calendarView.getCurDay();
+        calendarView.setRange(minYear, minYearMonth, minYearDay,
+                maxYear, maxYearMonth, maxYearDay);
+        header_foot_print_last_v.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                //翻到上一个月
+                calendarView.scrollToPre();
+            }
+        });
+        header_foot_print_next_v.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                //翻到下一个月
+                calendarView.scrollToNext();
+            }
+        });
+    }
+    private int minYear = 2018;
+    private int minYearMonth = 10;
+    private int minYearDay = 23;
+    private int maxYear;
+    private int maxYearMonth;
+    private int maxYearDay;
+
+    private void checkHeaderView(int year, int month) {
+        ViewUtil.setText(header_foot_print_date_tv, String.format(Locale.CHINA, "%d年%d月", year, month));
+        boolean canScrollToPre = year >= minYear && month > minYearMonth;
+        ViewUtil.setEnabled(header_foot_print_last_iv, canScrollToPre);
+        ViewUtil.setEnabled(header_foot_print_last_v, canScrollToPre);
+        boolean canScrollToNext = year <= maxYear && month < maxYearMonth;
+        ViewUtil.setEnabled(header_foot_print_next_iv, canScrollToNext);
+        ViewUtil.setEnabled(header_foot_print_next_v, canScrollToNext);
+    }
+
+
+    @Override
+    public void initListener() {
+        super.initListener();
+        calendarView.setOnMonthChangeListener(new CalendarView.OnMonthChangeListener() {
+            @Override
+            public void onMonthChange(int year, int month) {
+                checkHeaderView(year, month);
+            }
+        });
+        calendarView.setOnCalendarSelectListener(new CalendarView.OnCalendarSelectListener() {
+            @Override
+            public void onCalendarOutOfRange(Calendar calendar) {
+
+            }
+
+            @Override
+            public void onCalendarSelect(Calendar calendar, boolean isClick) {
+                date = String.format(Locale.CHINA, "%d-%d-%d", calendar.getYear(), calendar.getMonth(), calendar.getDay());
+                refreshData();
+            }
+        });
+    }
+
+    @Override
+    protected RecyclerView.Adapter getAdapter() {
+        return new RecyclerViewAdapter<UserFootprint>(SheepApp.getInstance(), R.layout.item_my_focus, list) {
+            @Override
+            public void convert(ViewHolder holder, UserFootprint item, int position) {
+                ImageView item_my_focus_iv = holder.itemView.findViewById(R.id.item_my_focus_iv);
+                TextView item_my_focus_info_tv = holder.itemView.findViewById(R.id.item_my_focus_info_tv);
+                TextView item_my_focus_tv = holder.itemView.findViewById(R.id.item_my_focus_tv);
+                ViewUtil.setVisibility(item_my_focus_tv, false);
+
+                ViewUtil.setAvatar(item_my_focus_iv, item.getPic());
+                ViewUtil.setText(item_my_focus_info_tv, item.getInfo());
+            }
+        };
+    }
+
+    private String date;
+    @Override
+    protected String getKey(int page, int per_page) {
+        return String.format(Locale.CHINA, "%s?page=%d&per_page=%d&date=%s", ApiKey.getUserFootPrintList, page, per_page, date);
+    }
+
+    @Override
+    protected Observable<BaseMessage> getApi(ApiService apiService) {
+        return apiService.getUserFootPrintList(page, per_page, date);
+    }
+
+    @Override
+    protected Class<UserFootprint> getTClass() {
+        return UserFootprint.class;
+    }
+
+    @Override
+    public int refreshDataType() {
+        return REFRESH_ON_YOURSELF;
+    }
+}

+ 1 - 1
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtPersonalCenter.java

@@ -422,7 +422,7 @@ public class FgtPersonalCenter extends BaseFragment {
             R.id.recommend_friend_layout, R.id.faq_layout, R.id.reservation_layout,
             R.id.version_layout, R.id.order_layout, R.id.proxy_game_account_layout,
             R.id.audit_activity_cl, R.id.audit_success_cl, R.id.audit_failed_cl,
-            R.id.iv_redpackage, R.id.ibtn_baseactivity_message
+            R.id.iv_redpackage, R.id.fgt_person_center_my_focus, R.id.ibtn_baseactivity_message
     })
     public void onViewClicked(View view) {
         switch (view.getId()) {

+ 2 - 2
app/src/main/java/org/afinal/simplecache/ApiKey.java

@@ -56,8 +56,8 @@ public class ApiKey {
     public static final String getGameUserUserFocusList = "app/game_user/user_focus/list";
     //关注的游戏列表
     public static final String getGameUserGameFocusList = "app/game_user/game_focus/list";
-    //TODO 足迹 服务器还没有接口
-    public static final String getFootMark = "app/punch/all_punch_log";
+    //足迹
+    public static final String getUserFootPrintList = "app/user/footprint/list";
     public static final String pageKeyUrl(String baseUrl, int page, int per_page){
         return String.format(Locale.CHINA, "%s?page=%d&per_page=%d", baseUrl, page, per_page);
     }

+ 15 - 0
app/src/main/res/drawable/layer_triangle_black.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <!-- 正三角 -->
+        <rotate
+            android:fromDegrees="45"
+            android:toDegrees="45"
+            android:pivotX="-40%"
+            android:pivotY="80%">
+            <shape android:shape="rectangle">
+                <solid android:color="#000"/>
+            </shape>
+        </rotate>
+    </item>
+</layer-list>

+ 15 - 0
app/src/main/res/drawable/layer_triangle_db.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <!-- 正三角 -->
+        <rotate
+            android:fromDegrees="45"
+            android:toDegrees="45"
+            android:pivotX="-40%"
+            android:pivotY="80%">
+            <shape android:shape="rectangle">
+                <solid android:color="#dbdbdb"/>
+            </shape>
+        </rotate>
+    </item>
+</layer-list>

+ 6 - 0
app/src/main/res/drawable/selector_tab_triangle_black_db.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:drawable="@drawable/layer_triangle_db" android:state_enabled="false" />
+    <item android:drawable="@drawable/layer_triangle_black" />
+</selector>

+ 5 - 7
app/src/main/res/layout/act_gc_game_app_detail.xml

@@ -191,13 +191,11 @@
         android:paddingTop="@dimen/content_padding_10"
         android:paddingBottom="@dimen/content_padding_10">
 
-        <TextView
+        <ImageView
+            android:id="@+id/write_comment"
             android:layout_width="45dp"
-            android:layout_height="45dp"
-            android:background="@drawable/shape_oval_light_blue"
-            android:gravity="center"
-            android:text="+"
-            android:textColor="@color/white"
-            android:textSize="30sp" />
+            android:layout_height="wrap_content"
+            android:adjustViewBounds="true"
+            android:scaleType="fitXY"/>
     </com.kfzs.duanduan.view.DragRelativeLayout>
 </RelativeLayout>

+ 91 - 21
app/src/main/res/layout/header_foot_print.xml

@@ -1,24 +1,94 @@
 <?xml version="1.0" encoding="utf-8"?>
-<com.haibin.calendarview.CalendarView xmlns:android="http://schemas.android.com/apk/res/android"
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/calendarView"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:background="#F5F5F5"
-    app:calendar_height="46dp"
-    app:current_day_lunar_text_color="#ffffff"
-    app:current_day_text_color="#ffffff"
-    app:current_month_lunar_text_color="#999999"
-    app:current_month_text_color="#333333"
-    app:day_text_size="12sp"
-    app:lunar_text_size="12sp"
-    app:min_year="2018"
-    app:month_view="com.sheep.gamegroup.view.customview.CalendarMonthView"
-    app:month_view_scrollable="true"
-    app:month_view_show_mode="mode_all"
-    app:scheme_lunar_text_color="#ffffff"
-    app:scheme_month_text_color="#ffffff"
-    app:week_background="#F5F5F5"
-    app:week_bar_view="com.haibin.calendarview.WeekBar"
-    app:week_start_with="mon"
-    app:week_text_color="#111" />
+    android:layout_height="wrap_content">
+
+    <TextView
+        android:id="@+id/header_foot_print_date_tv"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="15dp"
+        android:text="2018年11月"
+        android:textColor="#ff333333"
+        android:textSize="14sp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/header_foot_print_last_iv"
+        android:layout_width="10dp"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="24dp"
+        android:adjustViewBounds="true"
+        android:rotation="270"
+        android:scaleType="fitXY"
+        android:src="@drawable/selector_tab_triangle_black_db"
+        app:layout_constraintBottom_toBottomOf="@id/header_foot_print_date_tv"
+        app:layout_constraintEnd_toStartOf="@id/header_foot_print_date_tv"
+        app:layout_constraintTop_toTopOf="@id/header_foot_print_date_tv" />
+
+    <View
+        android:id="@+id/header_foot_print_last_v"
+        android:layout_width="60dp"
+        android:layout_height="40dp"
+        app:layout_constraintBottom_toBottomOf="@id/header_foot_print_date_tv"
+        app:layout_constraintEnd_toStartOf="@id/header_foot_print_date_tv"
+        app:layout_constraintTop_toTopOf="@id/header_foot_print_date_tv" />
+
+    <ImageView
+        android:id="@+id/header_foot_print_next_iv"
+        android:layout_width="10dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="24dp"
+        android:adjustViewBounds="true"
+        android:rotation="90"
+        android:scaleType="fitXY"
+        android:src="@drawable/selector_tab_triangle_black_db"
+        app:layout_constraintBottom_toBottomOf="@id/header_foot_print_date_tv"
+        app:layout_constraintStart_toEndOf="@id/header_foot_print_date_tv"
+        app:layout_constraintTop_toTopOf="@id/header_foot_print_date_tv" />
+
+    <View
+        android:id="@+id/header_foot_print_next_v"
+        android:layout_width="60dp"
+        android:layout_height="40dp"
+        app:layout_constraintBottom_toBottomOf="@id/header_foot_print_date_tv"
+        app:layout_constraintStart_toEndOf="@id/header_foot_print_date_tv"
+        app:layout_constraintTop_toTopOf="@id/header_foot_print_date_tv" />
+
+    <com.haibin.calendarview.CalendarView
+        android:id="@+id/calendarView"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="5dp"
+        android:background="@color/white"
+        app:calendar_height="46dp"
+        app:current_day_lunar_text_color="#999999"
+        app:current_day_text_color="#333333"
+        app:current_month_lunar_text_color="#999999"
+        app:current_month_text_color="#333333"
+        app:day_text_size="12sp"
+        app:layout_constraintTop_toBottomOf="@id/header_foot_print_date_tv"
+        app:lunar_text_size="12sp"
+        app:min_year="2018"
+        app:month_view="com.sheep.gamegroup.view.customview.CalendarMonthView2"
+        app:month_view_scrollable="true"
+        app:month_view_show_mode="mode_all"
+        app:selected_theme_color="#4889FF"
+        app:selected_lunar_text_color="@color/white"
+        app:selected_text_color="@color/white"
+        app:scheme_lunar_text_color="#ffffff"
+        app:scheme_month_text_color="#ffffff"
+        app:week_background="@color/white"
+        app:week_bar_view="com.haibin.calendarview.WeekBar"
+        app:week_start_with="mon"
+        app:week_text_color="#111" />
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="5dp"
+        android:background="#F0F0F0"
+        app:layout_constraintTop_toBottomOf="@id/calendarView" />
+</android.support.constraint.ConstraintLayout>

+ 2 - 1
app/src/main/res/layout/item_my_list_but.xml

@@ -22,6 +22,8 @@
             android:layout_height="0dp"
             android:minHeight="56dp"
             android:layout_weight="1"
+            android:paddingTop="10dp"
+            android:paddingBottom="10dp"
             android:paddingStart="20dp"
             android:paddingEnd="20dp"
             android:scaleType="fitCenter"
@@ -31,7 +33,6 @@
             android:id="@+id/my_item_text"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:layout_marginTop="10dp"
             android:gravity="center"
             android:text="试玩赚钱"
             android:textColor="@color/black_6_3"