Explorar el Código

Merge branch 'master' of http://10.8.230.114:3000/kemllor/small_sheep_android

zhaoyi hace 8 años
padre
commit
7bfdfab875
Se han modificado 31 ficheros con 1875 adiciones y 331 borrados
  1. 13 1
      app/src/main/java/com/sheep/jiuyan/samllsheep/SheepApp.java
  2. 102 0
      app/src/main/java/com/sheep/jiuyan/samllsheep/base/BaseFragment.java
  3. 40 300
      app/src/main/java/com/sheep/jiuyan/samllsheep/page/MainActivity.java
  4. 2 1
      app/src/main/java/com/sheep/jiuyan/samllsheep/page/WebActivity.java
  5. 54 0
      app/src/main/java/com/sheep/jiuyan/samllsheep/page/adapter/AdpCommonList.java
  6. 100 0
      app/src/main/java/com/sheep/jiuyan/samllsheep/page/adapter/AdpCommonRecy.java
  7. 85 0
      app/src/main/java/com/sheep/jiuyan/samllsheep/page/adapter/AdpMainActivity.java
  8. 58 0
      app/src/main/java/com/sheep/jiuyan/samllsheep/page/adapter/AdpMainPageViewPager.java
  9. 87 0
      app/src/main/java/com/sheep/jiuyan/samllsheep/page/adapter/ViewHolder.java
  10. 74 0
      app/src/main/java/com/sheep/jiuyan/samllsheep/page/entry/RecyleObj.java
  11. 18 0
      app/src/main/java/com/sheep/jiuyan/samllsheep/page/entry/RecyleType.java
  12. 33 0
      app/src/main/java/com/sheep/jiuyan/samllsheep/page/fragment/FgtMainPageOffline.java
  13. 214 0
      app/src/main/java/com/sheep/jiuyan/samllsheep/page/fragment/FgtMainPageTask.java
  14. 141 0
      app/src/main/java/com/sheep/jiuyan/samllsheep/page/view/ListMore.java
  15. 1 2
      app/src/main/java/com/sheep/jiuyan/samllsheep/page/weight/MutiProgress.java
  16. 193 0
      app/src/main/java/com/sheep/jiuyan/samllsheep/page/view/RappTabLayout.java
  17. 81 0
      app/src/main/java/com/sheep/jiuyan/samllsheep/page/view/ScrollerLine.java
  18. 21 0
      app/src/main/java/com/sheep/jiuyan/samllsheep/utils/BackDo.java
  19. 71 0
      app/src/main/java/com/sheep/jiuyan/samllsheep/utils/G.java
  20. 174 0
      app/src/main/java/com/sheep/jiuyan/samllsheep/utils/RecyleViewLoadMoreUtils.java
  21. 9 8
      app/src/main/java/com/sheep/jiuyan/samllsheep/utils/TitleBarUtils.java
  22. 2 2
      app/src/main/res/drawable/texe_background_round_theme_left.xml
  23. 2 2
      app/src/main/res/drawable/texe_background_round_theme_right.xml
  24. 12 0
      app/src/main/res/layout/fgt_main_page_offline.xml
  25. 165 0
      app/src/main/res/layout/fgt_main_page_task.xml
  26. 83 5
      app/src/main/res/layout/main_activity.xml
  27. 15 0
      app/src/main/res/layout/tab_ripple.xml
  28. 0 8
      app/src/main/res/layout/task_head.xml
  29. 3 1
      app/src/main/res/layout/title.xml
  30. 14 1
      app/src/main/res/values/common.xml
  31. 8 0
      app/src/main/res/values/view_style.xml

+ 13 - 1
app/src/main/java/com/sheep/jiuyan/samllsheep/SheepApp.java

@@ -4,8 +4,10 @@ import android.app.Activity;
 import android.app.Application;
 import android.content.Context;
 import android.os.Bundle;
+import android.util.DisplayMetrics;
 
 import com.liulishuo.filedownloader.FileDownloader;
+import com.sheep.jiuyan.samllsheep.utils.G;
 import com.tencent.bugly.Bugly;
 import com.tencent.mm.opensdk.openapi.IWXAPI;
 import com.tencent.mm.opensdk.openapi.WXAPIFactory;
@@ -33,7 +35,7 @@ public class SheepApp extends Application {
         mSheepApp = this;
         regWx();
         registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
-
+        initGoble();
         Bugly.init(getApplicationContext(), Config.BUGLY_APPID, BuildConfig.DEBUG);
     }
 
@@ -43,6 +45,16 @@ public class SheepApp extends Application {
         mActivitys = new HashMap<>();
     }
 
+    /**
+     * 初始化系统常用参数
+     */
+    private void initGoble() {
+        DisplayMetrics metric = getResources().getDisplayMetrics();
+        G.HEIGHT = metric.heightPixels;
+        G.WIDTH = metric.widthPixels;
+        G.DENSITY = metric.density;
+    }
+
     public int mActivityAount;
     /**
      * Activity 生命周期监听,用于监控app前后台状态切换

+ 102 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/base/BaseFragment.java

@@ -0,0 +1,102 @@
+package com.sheep.jiuyan.samllsheep.base;
+
+import android.os.Bundle;
+import android.support.annotation.IdRes;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * @ Created by Dlg
+ * @ <p>TiTle:  BaseFragment</p>
+ * @ <p>Description:方便统计数据</p>
+ * @ date:  2017/11/6 18:20
+ * @ QQ:    315096953
+ */
+
+public abstract class BaseFragment extends Fragment {
+
+    protected View mView;
+    /**
+     * 是否是第一次初始化,防止重复加载些东西用
+     */
+    protected boolean mIsFirstInit = true;
+
+    @Override
+    public void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setRetainInstance(true);
+    }
+
+    /**
+     * 注意用 mIsFirstInit 判断,防止重复加载
+     *
+     * @param inflater
+     * @param container
+     * @param savedInstanceState
+     * @return
+     */
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+        if (mView == null) {
+            mIsFirstInit = true;
+            mView = inflater.inflate(getLayoutId(), null);
+        } else {
+            mIsFirstInit = false;
+        }
+        return mView;
+    }
+
+    public abstract int getLayoutId();
+
+    public abstract void onViewCreated();
+
+    /**
+     * 一般要继承这个方法
+     *
+     * @param view
+     * @param savedInstanceState
+     */
+    @Override
+    public void onViewCreated(View view, Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        onViewCreated();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+    }
+
+
+    /**
+     * 万能的找View类
+     *
+     * @param id
+     * @param <T>
+     * @return
+     */
+    public <T extends View> T findViewById(@IdRes int id) {
+        return mView.findViewById(id);
+    }
+
+    /**
+     * 万能的找View类
+     *
+     * @param id
+     * @param tClass
+     * @param <T>
+     * @return
+     */
+    public <T extends View> T findViewById(@IdRes int id, Class<T> tClass) {
+        return mView.findViewById(id);
+    }
+
+}

+ 40 - 300
app/src/main/java/com/sheep/jiuyan/samllsheep/page/MainActivity.java

@@ -1,49 +1,32 @@
 package com.sheep.jiuyan.samllsheep.page;
 
 import android.Manifest;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.PackageManager;
-import android.graphics.Point;
 import android.os.Build;
 import android.os.Bundle;
 import android.support.v4.app.ActivityCompat;
 import android.support.v4.content.ContextCompat;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.widget.LinearLayoutManager;
-import android.text.TextUtils;
+import android.support.v4.view.ViewPager;
 import android.view.View;
 import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.ProgressBar;
-import android.widget.RelativeLayout;
 import android.widget.TextView;
-import android.widget.Toast;
 
 import com.bumptech.glide.Glide;
-import com.jcodecraeer.xrecyclerview.XRecyclerView;
 import com.sheep.jiuyan.samllsheep.R;
-import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.base.BaseActivity;
 import com.sheep.jiuyan.samllsheep.floatwindow.FloatWindow;
-import com.sheep.jiuyan.samllsheep.net.NetManager;
-import com.sheep.jiuyan.samllsheep.net.SheepCallback;
-import com.sheep.jiuyan.samllsheep.net.Url;
-import com.sheep.jiuyan.samllsheep.page.adapter.TaskAdapter;
-import com.sheep.jiuyan.samllsheep.page.entry.TaskPublish;
-import com.sheep.jiuyan.samllsheep.page.entry.User;
-import com.sheep.jiuyan.samllsheep.page.entry.WXTask;
-import com.sheep.jiuyan.samllsheep.utils.DeviceInfo;
-import com.sheep.jiuyan.samllsheep.utils.PackageUtil;
+import com.sheep.jiuyan.samllsheep.page.adapter.AdpMainPageViewPager;
+import com.sheep.jiuyan.samllsheep.page.fragment.FgtMainPageOffline;
+import com.sheep.jiuyan.samllsheep.page.fragment.FgtMainPageTask;
+import com.sheep.jiuyan.samllsheep.page.view.RappTabLayout;
+import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.PremissUtils;
-import com.sheep.jiuyan.samllsheep.utils.SpUtils;
+import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 
-import de.hdodenhof.circleimageview.CircleImageView;
-
 
 /*
 * author:kemllor
@@ -52,48 +35,18 @@ import de.hdodenhof.circleimageview.CircleImageView;
 * date:2017-12-15
 * file: MainActivity.class
 */
-public class MainActivity extends BaseActivity implements View.OnClickListener {
-
-    private XRecyclerView mRecyclerView;
-    private TaskAdapter mAdapter;
-    private TextView mTvWithdraw;
-    private TextView mTitle;
-    private TextView mMoney;
-    private TextView mToday;
-    private ImageView mDown;
-    private AlertDialog mDialog;
-    private TaskPublish mClickItem;
-    private ImageView mImgIcon;
-    private CircleImageView mImgUser;
-    private TextView mTvTitle;
-    private TextView mTvTime;
-    private TextView mTvCount;
-    private TextView mTvMoney;
-    private TextView mTvBouns;
-    private TextView mTvGuide;
-    private LinearLayout mTlDoing;
-
-
-    private LinearLayout mLlNewTask;
-
-    private RelativeLayout mll_progress;
-
-
-    private ProgressBar mMp1;
+public class MainActivity extends BaseActivity {
 
-    private WXTask mWXTask;
-    private TextView mNewTaskTitle;
-    private TextView mTvNewTaskDesc;
-    private TextView mTvNewTaskMoney;
-    private TextView mTvNewTaskBouns;
     private final int INTENT_GET_PERMISSION = 1;
+    private RappTabLayout mRappTabLayout;
+    private ViewPager mViewPager;
+    private AdpMainPageViewPager mAdpMainPageViewPager;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         Intent intent = new Intent(this, FloatWindow.class);
         startActivity(intent);
-
         getSA();
     }
 
@@ -114,10 +67,6 @@ public class MainActivity extends BaseActivity implements View.OnClickListener {
                 != PackageManager.PERMISSION_GRANTED) {
             sa.add(Manifest.permission.READ_PHONE_STATE);
         }
-        if (ContextCompat.checkSelfPermission(this, Manifest.permission.SYSTEM_ALERT_WINDOW)
-                != PackageManager.PERMISSION_GRANTED) {
-            sa.add(Manifest.permission.READ_PHONE_STATE);
-        }
         if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
                 != PackageManager.PERMISSION_GRANTED) {
             sa.add(Manifest.permission.READ_EXTERNAL_STORAGE);
@@ -139,7 +88,7 @@ public class MainActivity extends BaseActivity implements View.OnClickListener {
                 }
             }
             if (!isOk) {
-                Toast.makeText(MainActivity.this, "权限获取失败,部分功能可能无法正常工作。", Toast.LENGTH_SHORT).show();
+                G.showToast("权限获取失败,部分功能可能无法正常工作。");
             }
         }
         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
@@ -153,233 +102,43 @@ public class MainActivity extends BaseActivity implements View.OnClickListener {
 
     @Override
     public void initListener() {
-        mTvWithdraw.setOnClickListener(this);
-        mDown.setOnClickListener(this);
-        mImgUser.setOnClickListener(this);
     }
 
-
     @Override
     public void initData() {
-        requestNewPeopleTask();
-        HashMap<String, String> map = new HashMap<>();
-        map.put("wx_open_id", SpUtils.getOpenId(this));
-        NetManager.get(Url.PUBLISH_TASKS, map, getApplicationContext(), new SheepCallback<List<TaskPublish>>(this) {
-            @Override
-            public void success(List<TaskPublish> tasks) {
-                if (tasks != null && tasks.size() > 0) {
-                    mAdapter.setData(tasks);
-                    mAdapter.notifyDataSetChanged();
-                }
-            }
-        });
-        NetManager.get(Url.USER_INFO, map, getApplicationContext(), new SheepCallback<User>(this) {
-            @Override
-            public void success(User user) {
-                if (user != null) {
-                    mMoney.setText(user.getBalance());
-                    if (!MainActivity.this.isDestroyed())
-                        Glide.with(MainActivity.this)
-                                .load(user.getIcon())
-                                .placeholder(R.drawable.icon)
-                                .dontAnimate()
-                                .into(mImgUser);
-                    mToday.setText(String.format("今日收入:%s", user.getToday()));
-                }
-            }
-        });
-        NetManager.get(Url.USER_PULL_TASK, map, getApplicationContext(), new SheepCallback<TaskPublish>(this) {
-            @Override
-            public void success(final TaskPublish taskPublish) {
-                if (taskPublish != null) {
-                    mTlDoing.setVisibility(View.VISIBLE);
-                    if (!MainActivity.this.isDestroyed())
-                        Glide.with(MainActivity.this)
-                                .load(taskPublish.getTask().getIcon())
-                                .placeholder(R.drawable.icon)
-                                .dontAnimate()
-                                .into(mImgIcon);
-                    mTvTitle.setText(taskPublish.getTask().getTitle());
-                    mTvTime.setText("截止日期:" + taskPublish.getOverTime());
-                    mTvCount.setText(taskPublish.getSurplusCount() + "/" + taskPublish.getTotalCouont());
-                    mTvMoney.setText(taskPublish.getTask().getPrice());
-                    if (!TextUtils.isEmpty(taskPublish.getTask().getPkg())) {
-                        mTlDoing.setOnClickListener(new View.OnClickListener() {
-                            @Override
-                            public void onClick(View v) {
-                                PackageUtil.startApp(SheepApp.mContext, taskPublish.getTask().getPkg());
-                            }
-                        });
-                    }
-                    mTvBouns.setText(taskPublish.getTask().getBonus());
-                    mTvGuide.setOnClickListener(new View.OnClickListener() {
-                        @Override
-                        public void onClick(View v) {
-                            Intent intent = new Intent(MainActivity.this, WebActivity.class);
-                            intent.putExtra("url", taskPublish.getTask().getGuide());
-                            startActivity(intent);
-                        }
-                    });
-                } else {
-                    mTlDoing.setVisibility(View.GONE);
-                }
-            }
-
-            @Override
-            public void otherCode(int code, String string) {
-                mTlDoing.setVisibility(View.GONE);
-            }
-        });
+        ((TextView) findViewById(R.id.txt_main_activity_money))
+                .setText(G.mUser.getBalance());
+        ((TextView) findViewById(R.id.txt_main_activity_nick))
+                .setText(G.mUser.getNickName());
+        Glide.with(this)
+                .load(G.mUser.getIcon())
+                .placeholder(R.drawable.icon)
+                .dontAnimate()
+                .into((ImageView) findViewById(R.id.img_user));
     }
 
     @Override
     public void initView() {
-        findviews();
-        Point deviceSize = DeviceInfo.getDeviceSize(this);
-        View head = View.inflate(this, R.layout.task_head, null);
-        findViewHead(head);
-        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(deviceSize.x, LinearLayout.LayoutParams.WRAP_CONTENT);
-        head.setLayoutParams(params);
-        mRecyclerView.addHeaderView(head);
-
-        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
-        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
-        mRecyclerView.setLayoutManager(layoutManager);
-        mAdapter = new TaskAdapter(new ArrayList<TaskPublish>(), MainActivity.this);
-        mAdapter.setClickCallBack(new TaskAdapter.ItemClickCallBack<TaskPublish>() {
-            @Override
-            public void onItemClick(TaskPublish pos) {
-                mClickItem = pos;
-                checkUserTask();
-            }
-        });
-        mRecyclerView.setAdapter(mAdapter);
-        mRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
-            @Override
-            public void onRefresh() {
-                initData();
-                mRecyclerView.refreshComplete();
-            }
-
-            @Override
-            public void onLoadMore() {
-
-            }
-        });
-        mRecyclerView.setLoadingMoreEnabled(false);
-    }
-
-    private void checkUserTask() {
-        HashMap<String, String> map = new HashMap<>();
-        map.put("wx_open_id", SpUtils.getOpenId(this));
-        NetManager.get(Url.USER_CHECK_REGISTER, map, getApplicationContext(), new SheepCallback<String>(this) {
-            @Override
-            public void success(String ok) {
-                if (TextUtils.equals(ok, "ok")) {
-                    showDialog("是否接受任务?");
-                } else {
-                    showDialog("你有任务正在进行,是否取消,接受新任务?");
-                }
-            }
-        });
-    }
-
-    private void showDialog(String msg) {
-        if (mDialog == null) {
-            mDialog = new AlertDialog.Builder(MainActivity.this)
-                    .setMessage(msg)
-                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
-                        @Override
-                        public void onClick(DialogInterface dialog, int which) {
-                            mDialog.dismiss();
-                        }
-                    }).setPositiveButton("确认", new DialogInterface.OnClickListener() {
-                        @Override
-                        public void onClick(DialogInterface dialog, int which) {
-                            registerTask();
-                        }
-                    }).create();
-            mDialog.show();
-        } else {
-            mDialog.setMessage(msg);
-            mDialog.show();
-        }
-    }
-
-    //获取任务
-    private void registerTask() {
-        HashMap<String, String> map = new HashMap<>();
-        map.put("wx_open_id", SpUtils.getOpenId(this));
-        map.put("task_id", mClickItem.getId() + "");
-        NetManager.get(Url.USER_REGISTER_TASK, map, getApplicationContext(), new SheepCallback<String>(this) {
-            @Override
-            public void success(String o) {
-                initData();
-                String pkg = mClickItem.getTask().getPkg();
-                if (!TextUtils.isEmpty(pkg))
-                    if (PackageUtil.isAppInstalled(getApplicationContext(), pkg)) {
-                        PackageUtil.startApp(getApplicationContext(), pkg);
-                    } else {
-                        Intent intent = new Intent(MainActivity.this, DownloadActivity.class);
-                        intent.putExtra("task", mClickItem.getTask());
-                        startActivity(intent);
+        mRappTabLayout = (RappTabLayout) findViewById(R.id.tab_main_activity);
+        mViewPager = (ViewPager) findViewById(R.id.viewpager_main_activity);
+
+        mAdpMainPageViewPager = new AdpMainPageViewPager(getSupportFragmentManager());
+        mAdpMainPageViewPager.add(new FgtMainPageTask());
+        mAdpMainPageViewPager.add(new FgtMainPageOffline());
+        mViewPager.setAdapter(mAdpMainPageViewPager);
+        mRappTabLayout.setLine(G.getRealPix(30), G.getRealPix(4))
+                .setLineMargin(0, G.getRealPix(2), 0, G.getRealPix(4))
+                .setLineColor(getResources().getColor(R.color.black_text_deep))
+                .setupWithViewPager(mViewPager, R.layout.tab_ripple);
+
+        TitleBarUtils.getInstance()
+                .setTitleFinish(this)
+                .setRightImgBotton(this, R.drawable.set, new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        G.showToast("点设置");
                     }
-
-            }
-        });
-    }
-
-    private void findViewHead(View head) {
-        mTvWithdraw = (TextView) head.findViewById(R.id.tv_withdraw);
-        mTitle = (TextView) head.findViewById(R.id.title);
-        mMoney = (TextView) head.findViewById(R.id.money);
-        mToday = (TextView) head.findViewById(R.id.today);
-        mDown = head.findViewById(R.id.img_down);
-
-        mImgIcon = (ImageView) head.findViewById(R.id.img_icon);
-        mTvTitle = (TextView) head.findViewById(R.id.txt_baseactivity_title);
-        mTvTime = (TextView) head.findViewById(R.id.tv_time);
-        mTvCount = (TextView) head.findViewById(R.id.tv_count);
-        mTvMoney = (TextView) head.findViewById(R.id.tv_money);
-        mTvBouns = (TextView) head.findViewById(R.id.tv_bouns);
-        mTvGuide = (TextView) head.findViewById(R.id.tv_guide);
-        mTlDoing = (LinearLayout) head.findViewById(R.id.ll_doing);
-        mImgUser = head.findViewById(R.id.img_user);
-        mMp1 = (ProgressBar) head.findViewById(R.id.pb_commit);
-        mNewTaskTitle = head.findViewById(R.id.tv_new_title);
-        mTvNewTaskDesc = head.findViewById(R.id.tv_new_desc);
-        mTvNewTaskMoney = head.findViewById(R.id.tv_new_money);
-        mTvNewTaskBouns = head.findViewById(R.id.tv_new_bouns);
-        mLlNewTask = (LinearLayout) head.findViewById(R.id.ll_new_task);
-        mll_progress = head.findViewById(R.id.ll_progress);
-        mll_progress.setOnClickListener(this);
-    }
-
-    private void requestNewPeopleTask() {
-        final HashMap<String, String> map = new HashMap<>();
-        map.put("wx_open_id", SpUtils.getOpenId(this));
-        NetManager.get(Url.WXTASK, map, this, new SheepCallback<WXTask>(this) {
-            @Override
-            public void success(WXTask o) {
-                //             if(mMp1)
-                mWXTask = o;
-                mLlNewTask.setVisibility(View.VISIBLE);
-                mMp1.setProgress((int) (((float) mWXTask.getCommitCount()) / 4 * 100));
-                mNewTaskTitle.setText(mWXTask.getTitle());
-                mTvNewTaskBouns.setText(mWXTask.getBonus());
-                mTvNewTaskDesc.setText(mWXTask.getTaskDesc());
-                mTvNewTaskMoney.setText(mWXTask.getPrice());
-            }
-
-            @Override
-            public void otherCode(int code, String string) {
-                mLlNewTask.setVisibility(View.GONE);
-            }
-        });
-    }
-
-    private void findviews() {
-        mRecyclerView = (XRecyclerView) findViewById(R.id.tasks);
+                });
     }
 
     @Override
@@ -403,23 +162,4 @@ public class MainActivity extends BaseActivity implements View.OnClickListener {
         EventBus.getDefault().post(floatMsg);*/
     }
 
-    @Override
-    public void onClick(View v) {
-        Intent intent;
-        int i = v.getId();
-        if (i == R.id.tv_withdraw) {
-            intent = new Intent(MainActivity.this, WithdrawActivity.class);
-            startActivity(intent);
-        } else if (i == R.id.img_down) {
-            intent = new Intent(MainActivity.this, DownloadActivity.class);
-            startActivity(intent);
-        } else if (i == R.id.img_user) {
-            intent = new Intent(MainActivity.this, UserCenterActivity.class);
-            startActivity(intent);
-        } else if (i == R.id.ll_progress) {
-            intent = new Intent(MainActivity.this, InputWXAccountActivity.class);
-            intent.putExtra("count", mWXTask.getCommitCount());
-            startActivity(intent);
-        }
-    }
 }

+ 2 - 1
app/src/main/java/com/sheep/jiuyan/samllsheep/page/WebActivity.java

@@ -20,6 +20,7 @@ import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
 public class WebActivity extends BaseActivity {
 
     private WebView mWeb;
+    public final static String INTENT_URL = "url";
 
     @Override
     protected int getLayoutId() {
@@ -41,7 +42,7 @@ public class WebActivity extends BaseActivity {
             }
         });
         TitleBarUtils.getInstance()
-                .setTitle(this,"任务攻略")
+                .setTitle(this, "任务攻略")
                 .setTitleFinish(this);
     }
 

+ 54 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/page/adapter/AdpCommonList.java

@@ -0,0 +1,54 @@
+package com.sheep.jiuyan.samllsheep.page.adapter;
+
+import android.content.Context;
+import android.widget.BaseAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @ Created by Dlg
+ * @ <p>TiTle:  AdpCommonList</p>
+ * @ <p>Description:</p>
+ * @ date:  2017/12/28 10:29
+ * @ QQ:    315096953
+ */
+
+public abstract class AdpCommonList<T> extends BaseAdapter {
+
+    protected Context mContext;
+    protected List<T> mListDatas = new ArrayList<>();
+
+
+    public void clear() {
+        mListDatas.clear();
+    }
+
+    public void addAll(List<T> list) {
+        mListDatas.addAll(list);
+    }
+
+    public void add(T t) {
+        mListDatas.add(t);
+    }
+
+    public AdpCommonList(Context context) {
+        mContext = context;
+    }
+
+    @Override
+    public int getCount() {
+        return mListDatas.size();
+    }
+
+    @Override
+    public T getItem(int i) {
+        return mListDatas.get(i);
+    }
+
+    @Override
+    public long getItemId(int i) {
+        return 0;
+    }
+
+}

+ 100 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/page/adapter/AdpCommonRecy.java

@@ -0,0 +1,100 @@
+package com.sheep.jiuyan.samllsheep.page.adapter;
+
+import android.content.Context;
+import android.support.annotation.LayoutRes;
+import android.support.v7.widget.RecyclerView;
+import android.view.ViewGroup;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @ Created by Dlg
+ * @ <p>TiTle:  AdpCommonRecy</p>
+ * @ <p>Description:通用的RecyAdp</p>
+ * @ date:  2017/11/28 11:01
+ * @ QQ:    315096953
+ */
+
+public abstract class AdpCommonRecy<T> extends RecyclerView.Adapter<ViewHolder> {
+    protected Context mContext;
+    protected List<T> mListDatas = new ArrayList<>();
+
+    public AdpCommonRecy(Context context) {
+        mContext = context;
+    }
+
+    public Context getmContext() {
+        return mContext;
+    }
+
+    public List<T> getmListDatas() {
+        return mListDatas;
+    }
+
+    public void addAll(List<T> list) {
+        this.mListDatas.addAll(list);
+    }
+
+    public void add(T t) {
+        this.mListDatas.add(t);
+    }
+
+    public void clear() {
+        this.mListDatas.clear();
+    }
+
+    public T getItem(int position) {
+        return this.mListDatas.get(position);
+    }
+
+    /**
+     * 根据viewType返回layout的布局id
+     *
+     * @param viewType
+     * @return
+     */
+    public abstract @LayoutRes
+    int getViewIdByType(int viewType);
+
+    @Override
+    public int getItemViewType(int position) {
+        return super.getItemViewType(position);
+    }
+
+    @Override
+    public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
+        ViewHolder viewHolder = ViewHolder.get(mContext, null, parent,
+                getViewIdByType(viewType), -1);
+        onCreated(viewHolder, viewType);
+        return viewHolder;
+    }
+
+    @Override
+    public void onBindViewHolder(ViewHolder holder, int position) {
+        holder.setmPosition(position);
+        convert(holder, mListDatas.get(position));
+    }
+
+    /**
+     * 主要的组件绑定实现
+     *
+     * @param holder
+     * @param t
+     */
+    public abstract void convert(ViewHolder holder, T t);
+
+    /**
+     * 首次创建视图时的操作
+     *
+     * @param holder
+     * @param viewType
+     */
+    public abstract void onCreated(ViewHolder holder, int viewType);
+
+    @Override
+    public int getItemCount() {
+        return mListDatas.size();
+    }
+
+}

+ 85 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/page/adapter/AdpMainActivity.java

@@ -0,0 +1,85 @@
+package com.sheep.jiuyan.samllsheep.page.adapter;
+
+import android.content.Context;
+import android.content.Intent;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.bumptech.glide.Glide;
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.page.WebActivity;
+import com.sheep.jiuyan.samllsheep.page.entry.TaskPublish;
+
+/**
+ * @ Created by Dlg
+ * @ <p>TiTle:  AdpMainActivity</p>
+ * @ <p>Description:</p>
+ * @ date:  2018/1/16 13:29
+ * @ QQ:    315096953
+ */
+
+public class AdpMainActivity extends AdpCommonRecy<TaskPublish> {
+
+    public final static int TAG_TASK = R.id.tagid1;
+    private final static int TAG_URL = R.id.tagid2;
+
+    /**
+     * 点击后的监听处理,一定要先设置再setAdapter
+     */
+    private View.OnClickListener onClickListener;
+
+    public AdpMainActivity(Context context) {
+        super(context);
+    }
+
+    public void setOnClickListener(View.OnClickListener onClickListener) {
+        this.onClickListener = onClickListener;
+    }
+
+    @Override
+    public int getViewIdByType(int viewType) {
+        return R.layout.task_item;
+    }
+
+    @Override
+    public void convert(ViewHolder holder, TaskPublish taskPublish) {
+
+        holder.itemView.setTag(TAG_TASK, taskPublish);
+        holder.getView(R.id.tv_guide, TextView.class)
+                .setTag(TAG_URL, taskPublish.getTask().getGuide());
+
+        holder.getView(R.id.txt_baseactivity_title, TextView.class)
+                .setText(taskPublish.getTask().getTitle());
+        holder.getView(R.id.tv_count, TextView.class)
+                .setText(taskPublish.getSurplusCount() + "/" + taskPublish.getTotalCouont());
+        holder.getView(R.id.tv_time, TextView.class)
+                .setText(String.format("截止日期:%s", taskPublish.getOverTime()));
+        holder.getView(R.id.tv_money, TextView.class)
+                .setText(taskPublish.getTask().getPrice());
+        holder.getView(R.id.tv_bouns, TextView.class)
+                .setText(taskPublish.getTask().getBonus());
+        Glide.with(mContext)
+                .load(taskPublish.getTask().getIcon())
+                .placeholder(R.drawable.sheep)
+                .dontAnimate()
+                .into(holder.getView(R.id.img_icon, ImageView.class));
+
+    }
+
+    @Override
+    public void onCreated(ViewHolder holder, int viewType) {
+        if (onClickListener != null) {
+            holder.itemView.setOnClickListener(onClickListener);
+        }
+        holder.getView(R.id.tv_guide).setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                Intent intent = new Intent(mContext, WebActivity.class);
+                intent.putExtra(WebActivity.INTENT_URL, (String) v.getTag(TAG_URL));
+                mContext.startActivity(intent);
+            }
+        });
+    }
+
+}

+ 58 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/page/adapter/AdpMainPageViewPager.java

@@ -0,0 +1,58 @@
+package com.sheep.jiuyan.samllsheep.page.adapter;
+
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentPagerAdapter;
+import android.view.ViewGroup;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @ Created by Dlg
+ * @ <p>TiTle:  AdpMainPageViewPager</p>
+ * @ <p>Description:</p>
+ * @ date:  2018/1/16 14:57
+ * @ QQ:    315096953
+ */
+
+public class AdpMainPageViewPager extends FragmentPagerAdapter {
+
+    private List<Fragment> fragmentList = new ArrayList<>();
+    private String[] mStrTitles = {"任务", "挂机"};
+
+    public AdpMainPageViewPager(FragmentManager fm) {
+        super(fm);
+    }
+
+    public void add(Fragment fragment) {
+        fragmentList.add(fragment);
+    }
+
+    @Override
+    public Fragment getItem(int position) {
+        return fragmentList.get(position);
+    }
+
+    @Override
+    public int getCount() {
+        return fragmentList.size();
+    }
+
+    @Override
+    public Object instantiateItem(ViewGroup container, int position) {
+        return super.instantiateItem(container, position);
+    }
+
+    @Override
+    public void destroyItem(ViewGroup container, int position, Object object) {
+        super.destroyItem(container, position, object);
+    }
+
+    @Override
+    public CharSequence getPageTitle(int position) {
+        return mStrTitles[position];
+    }
+
+
+}

+ 87 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/page/adapter/ViewHolder.java

@@ -0,0 +1,87 @@
+package com.sheep.jiuyan.samllsheep.page.adapter;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.os.Build;
+import android.util.SparseArray;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.AlphaAnimation;
+import android.widget.TextView;
+
+/**
+ * @ Created by Dlg
+ * @ <p>TiTle:  ViewHolder</p>
+ * @ <p>Description:</p>
+ * @ date:  2017/11/28 11:05
+ * @ QQ:    315096953
+ */
+
+public class ViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder {
+    private SparseArray<View> mViews;
+    private int mPosition;
+
+    public ViewHolder(Context context, View itemView, ViewGroup parent, int position) {
+        super(itemView);
+        this.mPosition = position;
+        this.mViews = new SparseArray();
+    }
+
+    public static ViewHolder get(Context context, View convertView, ViewGroup parent, int layoutId, int position) {
+        if (convertView == null) {
+            View holder2 = LayoutInflater.from(context).inflate(layoutId, parent, false);
+            ViewHolder holder1 = new ViewHolder(context, holder2, parent, position);
+            return holder1;
+        } else {
+            ViewHolder holder = (ViewHolder) convertView.getTag();
+            holder.mPosition = position;
+            return holder;
+        }
+    }
+
+    public <T extends View> T getView(int viewId) {
+        View view = this.mViews.get(viewId);
+        if (view == null) {
+            view = this.itemView.findViewById(viewId);
+            this.mViews.put(viewId, view);
+        }
+        return (T) view;
+    }
+
+    public <T extends View> T getView(int viewId, Class<T> t) {
+        return (T) getView(viewId);
+    }
+
+    @SuppressLint({"NewApi"})
+    public ViewHolder setAlpha(int viewId, float value) {
+        if (Build.VERSION.SDK_INT >= 11) {
+            this.getView(viewId).setAlpha(value);
+        } else {
+            AlphaAnimation alpha = new AlphaAnimation(value, value);
+            alpha.setDuration(0L);
+            alpha.setFillAfter(true);
+            this.getView(viewId).startAnimation(alpha);
+        }
+        return this;
+    }
+
+    public ViewHolder setVisible(int viewId, boolean visible) {
+        this.getView(viewId).setVisibility(visible ? View.VISIBLE : View.GONE);
+        return this;
+    }
+
+    public ViewHolder setText(int viewId, String text) {
+        this.getView(viewId, TextView.class).setText(text);
+        return this;
+    }
+
+    public int getmPosition() {
+        return mPosition;
+    }
+
+    public void setmPosition(int mPosition) {
+        this.mPosition = mPosition;
+    }
+}
+

+ 74 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/page/entry/RecyleObj.java

@@ -0,0 +1,74 @@
+package com.sheep.jiuyan.samllsheep.page.entry;
+
+/**
+ * @ Created by Dlg
+ * @ <p>TiTle:  RecyleObj</p>
+ * @ <p>Description:</p>
+ * @ date:  2017/11/29 17:19
+ * @ QQ:    315096953
+ */
+
+public class RecyleObj {
+
+    private RecyleType recyleType;
+
+    private int index;
+
+    private Object dataObj;
+
+    public int getIndex() {
+        return index;
+    }
+
+    public void setIndex(int index) {
+        this.index = index;
+    }
+
+    public Object getDataObj() {
+        return dataObj;
+    }
+
+    public <T> T getDataObjT() {
+        return (T) dataObj;
+    }
+
+    public <T> T getDataObjT(T classz) {
+        return (T) dataObj;
+    }
+
+    public void setDataObj(Object dataObj) {
+        this.dataObj = dataObj;
+    }
+
+    public RecyleType getRecyleType() {
+        return recyleType;
+    }
+
+    public void setRecyleType(RecyleType recyleType) {
+        this.recyleType = recyleType;
+    }
+
+
+    /**
+     * 生成指定RecyleView的类
+     *
+     * @param recyleType
+     * @param dataObj
+     * @return
+     */
+    public static RecyleObj make(RecyleType recyleType, Object dataObj) {
+        RecyleObj recyleObj = new RecyleObj();
+        recyleObj.setRecyleType(recyleType);
+        recyleObj.setDataObj(dataObj);
+        return recyleObj;
+    }
+
+    public static RecyleObj make(RecyleType recyleType, Object dataObj, int position) {
+        RecyleObj recyleObj = new RecyleObj();
+        recyleObj.setRecyleType(recyleType);
+        recyleObj.setDataObj(dataObj);
+        recyleObj.setIndex(position);
+        return recyleObj;
+    }
+
+}

+ 18 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/page/entry/RecyleType.java

@@ -0,0 +1,18 @@
+package com.sheep.jiuyan.samllsheep.page.entry;
+
+/**
+ * @ Created by Dlg
+ * @ <p>TiTle:  RecyleType</p>
+ * @ <p>Description: 所有RecyleType定义View类型,以后都已经放在这里,并一定要写好注释,恳求!!!</p>
+ * @ date:  2017/6/15 13:22
+ * @ QQ:    315096953
+ */
+
+public enum RecyleType {
+
+
+    //首页的头
+    MAIN_PAGE_HEAD,
+    //首页的任务列表
+    MAIN_PAGE_LIST
+}

+ 33 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/page/fragment/FgtMainPageOffline.java

@@ -0,0 +1,33 @@
+package com.sheep.jiuyan.samllsheep.page.fragment;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.base.BaseFragment;
+
+/**
+ * @ Created by Dlg
+ * @ <p>TiTle:  FgtMainPageOffline</p>
+ * @ <p>Description:</p>
+ * @ date:  2018/1/16 14:59
+ * @ QQ:    315096953
+ */
+
+public class FgtMainPageOffline extends BaseFragment {
+
+    @Override
+    public int getLayoutId() {
+        return R.layout.fgt_main_page_task;
+    }
+
+    @Override
+    public void onViewCreated() {
+
+    }
+
+
+}

+ 214 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/page/fragment/FgtMainPageTask.java

@@ -0,0 +1,214 @@
+package com.sheep.jiuyan.samllsheep.page.fragment;
+
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.support.v7.app.AlertDialog;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.TextView;
+
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.base.BaseActivity;
+import com.sheep.jiuyan.samllsheep.base.BaseFragment;
+import com.sheep.jiuyan.samllsheep.net.NetManager;
+import com.sheep.jiuyan.samllsheep.net.SheepCallback;
+import com.sheep.jiuyan.samllsheep.net.Url;
+import com.sheep.jiuyan.samllsheep.page.DownloadActivity;
+import com.sheep.jiuyan.samllsheep.page.adapter.AdpMainActivity;
+import com.sheep.jiuyan.samllsheep.page.entry.TaskPublish;
+import com.sheep.jiuyan.samllsheep.page.entry.User;
+import com.sheep.jiuyan.samllsheep.page.entry.WXTask;
+import com.sheep.jiuyan.samllsheep.utils.G;
+import com.sheep.jiuyan.samllsheep.utils.PackageUtil;
+import com.sheep.jiuyan.samllsheep.utils.SpUtils;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * @ Created by Dlg
+ * @ <p>TiTle:  FgtMainPageTask</p>
+ * @ <p>Description:</p>
+ * @ date:  2018/1/16 14:25
+ * @ QQ:    315096953
+ */
+
+public class FgtMainPageTask extends BaseFragment {
+
+
+    private AdpMainActivity mAdapter;
+    private TaskPublish mClickItem;
+    private AlertDialog mDialog;
+
+
+    @Override
+    public int getLayoutId() {
+        return R.layout.fgt_main_page_offline;
+    }
+
+    @Override
+    public void onViewCreated() {
+
+        mAdapter = new AdpMainActivity(getActivity());
+        mAdapter.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                mClickItem = (TaskPublish) view.getTag(AdpMainActivity.TAG_TASK);
+                checkUserTask();
+            }
+        });
+    }
+
+
+    private void checkUserTask() {
+        HashMap<String, String> map = new HashMap<>();
+        map.put("wx_open_id", SpUtils.getOpenId(getActivity()));
+        NetManager.get(Url.USER_CHECK_REGISTER, map, getActivity(), new SheepCallback<String>(getActivity()) {
+            @Override
+            public void success(String ok) {
+                if (TextUtils.equals(ok, "ok")) {
+                    showDialog("是否接受任务?");
+                } else {
+                    showDialog("你有任务正在进行,是否取消,接受新任务?");
+                }
+            }
+        });
+    }
+
+    private void showDialog(String msg) {
+        if (mDialog == null) {
+            mDialog = new AlertDialog.Builder(getActivity())
+                    .setMessage(msg)
+                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
+                        @Override
+                        public void onClick(DialogInterface dialog, int which) {
+                            mDialog.dismiss();
+                        }
+                    }).setPositiveButton("确认", new DialogInterface.OnClickListener() {
+                        @Override
+                        public void onClick(DialogInterface dialog, int which) {
+                            registerTask();
+                        }
+                    }).create();
+            mDialog.show();
+        } else {
+            mDialog.setMessage(msg);
+            mDialog.show();
+        }
+    }
+
+    //获取任务
+    private void registerTask() {
+        HashMap<String, String> map = new HashMap<>();
+        map.put("wx_open_id", SpUtils.getOpenId(getActivity()));
+        map.put("task_id", mClickItem.getId() + "");
+        NetManager.get(Url.USER_REGISTER_TASK, map, getActivity(), new SheepCallback<String>(getActivity()) {
+            @Override
+            public void success(String o) {
+                initData();
+                String pkg = mClickItem.getTask().getPkg();
+                if (!TextUtils.isEmpty(pkg))
+                    if (PackageUtil.isAppInstalled(getActivity(), pkg)) {
+                        PackageUtil.startApp(getActivity(), pkg);
+                    } else {
+                        Intent intent = new Intent(getActivity(), DownloadActivity.class);
+                        intent.putExtra("task", mClickItem.getTask());
+                        startActivity(intent);
+                    }
+
+            }
+        });
+    }
+
+
+    private void requestNewPeopleTask() {
+        final HashMap<String, String> map = new HashMap<>();
+        map.put("wx_open_id", SpUtils.getOpenId(getActivity()));
+        NetManager.get(Url.WXTASK, map, getActivity(), new SheepCallback<WXTask>(getActivity()) {
+            @Override
+            public void success(WXTask o) {
+//                mWXTask = o;
+//                mLlNewTask.setVisibility(View.VISIBLE);
+//                mMp1.setProgress((int) (((float) mWXTask.getCommitCount()) / 4 * 100));
+//                mNewTaskTitle.setText(mWXTask.getTitle());
+//                mTvNewTaskBouns.setText(mWXTask.getBonus());
+//                mTvNewTaskDesc.setText(mWXTask.getTaskDesc());
+//                mTvNewTaskMoney.setText(mWXTask.getPrice());
+            }
+
+            @Override
+            public void otherCode(int code, String string) {
+//                mLlNewTask.setVisibility(View.GONE);
+            }
+        });
+    }
+
+
+    public void initData() {
+        requestNewPeopleTask();
+        HashMap<String, String> map = new HashMap<>();
+        map.put("wx_open_id", SpUtils.getOpenId(getActivity()));
+        NetManager.get(Url.PUBLISH_TASKS, map, getActivity(), new SheepCallback<List<TaskPublish>>(getActivity()) {
+            @Override
+            public void success(List<TaskPublish> tasks) {
+                if (tasks != null && tasks.size() > 0) {
+                    mAdapter.addAll(tasks);
+                    mAdapter.notifyDataSetChanged();
+                }
+            }
+        });
+        NetManager.get(Url.USER_INFO, map, getActivity(), new SheepCallback<User>(getActivity()) {
+            @Override
+            public void success(User user) {
+                if (user != null) {
+                    G.mUser = user;
+                    ((BaseActivity) getActivity()).initData();//刷新数据
+                    findViewById(R.id.txt_fgt_main_page_task_income, TextView.class)
+                            .setText(user.getToday() + "");
+                }
+            }
+        });
+        NetManager.get(Url.USER_PULL_TASK, map, getActivity(), new SheepCallback<TaskPublish>(getActivity()) {
+            @Override
+            public void success(final TaskPublish taskPublish) {
+                if (taskPublish != null) {
+//                    mTlDoing.setVisibility(View.VISIBLE);
+//                    if (!getActivity().isDestroyed())
+//                        Glide.with(getActivity())
+//                                .load(taskPublish.getTask().getIcon())
+//                                .placeholder(R.drawable.icon)
+//                                .dontAnimate()
+//                                .into(mImgIcon);
+//                    mTvTitle.setText(taskPublish.getTask().getTitle());
+//                    mTvTime.setText("截止日期:" + taskPublish.getOverTime());
+//                    mTvCount.setText(taskPublish.getSurplusCount() + "/" + taskPublish.getTotalCouont());
+//                    mTvMoney.setText(taskPublish.getTask().getPrice());
+//                    if (!TextUtils.isEmpty(taskPublish.getTask().getPkg())) {
+//                        mTlDoing.setOnClickListener(new View.OnClickListener() {
+//                            @Override
+//                            public void onClick(View v) {
+//                                PackageUtil.startApp(SheepApp.mContext, taskPublish.getTask().getPkg());
+//                            }
+//                        });
+//                    }
+//                    mTvBouns.setText(taskPublish.getTask().getBonus());
+//                    mTvGuide.setOnClickListener(new View.OnClickListener() {
+//                        @Override
+//                        public void onClick(View v) {
+//                            Intent intent = new Intent(getActivity(), WebActivity.class);
+//                            intent.putExtra("url", taskPublish.getTask().getGuide());
+//                            startActivity(intent);
+//                        }
+//                    });
+//                } else {
+//                    mTlDoing.setVisibility(View.GONE);
+                }
+            }
+
+            @Override
+            public void otherCode(int code, String string) {
+//                mTlDoing.setVisibility(View.GONE);
+            }
+        });
+    }
+}

+ 141 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/page/view/ListMore.java

@@ -0,0 +1,141 @@
+package com.sheep.jiuyan.samllsheep.page.view;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.util.AttributeSet;
+import android.widget.AbsListView;
+import android.widget.FrameLayout;
+import android.widget.ListView;
+
+import com.sheep.jiuyan.samllsheep.R;
+
+
+/**
+ * @ Created by Dlg
+ * @ <p>TiTle:  ListMore</p>
+ * @ <p>Description: 加载更多和上拉更多</p>
+ * @ date:  2015/11/15 0:08
+ * @ QQ:    315096953
+ */
+public class ListMore extends SwipeRefreshLayout {
+
+    private ListView mListView;
+    private boolean mRefreshEnable;
+    private boolean mPullMoreEnable;
+    private OnListMoreListener mOnListMoreListener;
+    private boolean mInitOver;
+    private boolean mIsSetEmptyView = false;
+    private int dividerHeight = 0;//divider的高度
+
+    public ListMore(Context context) {
+        super(context);
+        init(null);
+    }
+
+    public ListMore(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init(attrs);
+    }
+
+    private void init(AttributeSet attrs) {
+        if (mInitOver) {
+            return;
+        }
+        //只初始化一次。
+        mInitOver = true;
+        mListView = new ListView(getContext());
+        if (attrs != null) {
+            TypedArray attribute = getContext().obtainStyledAttributes(attrs,
+                    R.styleable.ListMore);
+            if (attribute.hasValue(R.styleable.ListMore_listSelector)) {
+                mListView.setSelector(attribute.getDrawable(R.styleable.ListMore_listSelector));
+            }
+            if (attribute.hasValue(R.styleable.ListMore_dividerDrawable)) {
+                mListView.setDivider(attribute.getDrawable(R.styleable.ListMore_dividerDrawable));
+            }
+            dividerHeight = attribute.getDimensionPixelOffset(R.styleable.ListMore_dividerHeight, 0);
+            attribute.recycle();
+        }
+
+        FrameLayout layout = new FrameLayout(getContext());
+        layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams
+                .MATCH_PARENT));
+
+
+        mListView.setOnScrollListener(cls);
+        mListView.setDividerHeight(dividerHeight);
+        this.setOnRefreshListener(new OnRefreshListener() {
+            @Override
+            public void onRefresh() {
+                if (mOnListMoreListener != null) {
+                    mOnListMoreListener.onRefresh();
+                }
+            }
+        });
+        mListView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams
+                .MATCH_PARENT));
+
+        layout.addView(mListView);
+
+        this.addView(layout);
+    }
+
+    public ListView getmListView() {
+        return mListView;
+    }
+
+    public boolean ismPullMoreEnable() {
+        return mPullMoreEnable;
+    }
+
+    public void setmPullMoreEnable(boolean mPullMoreEnable) {
+        this.mPullMoreEnable = mPullMoreEnable;
+    }
+
+    public void setmRefreshEnable(boolean mRefreshEnable) {
+        this.mRefreshEnable = mRefreshEnable;
+    }
+
+    public OnListMoreListener getmOnListMoreListener() {
+        return mOnListMoreListener;
+    }
+
+    public void setmOnListMoreListener(OnListMoreListener mOnListMoreListener) {
+        this.mOnListMoreListener = mOnListMoreListener;
+    }
+
+    private AbsListView.OnScrollListener cls = new AbsListView.OnScrollListener() {
+        @Override
+        public void onScrollStateChanged(AbsListView view, int scrollState) {
+        }
+
+        @Override
+        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
+//            LogUtil.e(firstVisibleItem + "|" + visibleItemCount + "|" + totalItemCount + "|" +
+//                    isRefreshing() + "|" + ismPullMoreEnable());
+            if (mOnListMoreListener != null && totalItemCount > 0
+                    && ismPullMoreEnable() && !isRefreshing()
+                    && firstVisibleItem + visibleItemCount > totalItemCount - 1) {
+                setRefreshing(true);
+                mOnListMoreListener.onLoadMore();
+            }
+            if (view.getChildCount() < 1) {
+                ListMore.this.setEnabled(true);
+                return;
+            }
+            ListMore.this.setEnabled(view.getFirstVisiblePosition() == 0
+                    && view.getChildAt(0).getTop() > view.getPaddingTop() - 3);
+        }
+    };
+
+    /**
+     * 上拉和下拉的刷新监听
+     */
+    public interface OnListMoreListener {
+        void onRefresh();
+
+        void onLoadMore();
+    }
+
+}

+ 1 - 2
app/src/main/java/com/sheep/jiuyan/samllsheep/page/weight/MutiProgress.java

@@ -1,4 +1,4 @@
-package com.sheep.jiuyan.samllsheep.page.weight;
+package com.sheep.jiuyan.samllsheep.page.view;
 
 import java.util.ArrayList;
 
@@ -6,7 +6,6 @@ import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Bitmap;
 import android.graphics.Bitmap.Config;
-import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Paint;

+ 193 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/page/view/RappTabLayout.java

@@ -0,0 +1,193 @@
+package com.sheep.jiuyan.samllsheep.page.view;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.support.annotation.LayoutRes;
+import android.support.annotation.NonNull;
+import android.support.v4.view.ViewPager;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @ Created by Dlg
+ * @ <p>TiTle:  RappTabLayout</p>
+ * @ <p>Description:</p>
+ * @ date:  2017/12/26 0:05
+ * @ QQ:    315096953
+ */
+
+public class RappTabLayout extends RelativeLayout {
+
+    private ScrollerLine mScrollerLine;
+    private LinearLayout mLayoutLine;
+    private LinearLayout mLayoutMain;
+    private int mCount = 0;
+    private int mLastSelect = 0;
+    private ViewPager mViewPager;//对应的ViewPager
+    private boolean mIsInitLine = false;
+    private List<TextView> mListTitle = new ArrayList<>();
+
+
+    public RappTabLayout(Context context) {
+        super(context);
+        initView(context);
+    }
+
+    public RappTabLayout(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        initView(context);
+    }
+
+    public RappTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        initView(context);
+    }
+
+    private void initView(Context context) {
+        if (mLayoutLine != null) {
+            return;
+        }
+        mLayoutLine = new LinearLayout(context);
+        mLayoutMain = new LinearLayout(context);
+        LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT
+                , ViewGroup.LayoutParams.WRAP_CONTENT);
+        layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
+        mLayoutLine.setLayoutParams(layoutParams);
+
+        mLayoutMain.setOrientation(LinearLayout.HORIZONTAL);
+        mLayoutMain.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT
+                , ViewGroup.LayoutParams.MATCH_PARENT));
+        mScrollerLine = new ScrollerLine(context);
+        mScrollerLine.setBackgroundColor(Color.WHITE);
+        mLayoutLine.addView(mScrollerLine);
+    }
+
+    public void setTitle(int position, String title) {
+        mListTitle.get(position).setText(title);
+    }
+
+
+    /**
+     * 只能调用一次。没去清空那些了。
+     *
+     * @param viewPager
+     * @param resId     第一个子组件是TextView,设置SelectDrawable
+     */
+    public void setupWithViewPager(@NonNull ViewPager viewPager, @LayoutRes int resId) {
+        mViewPager = viewPager;
+        if (mViewPager.getAdapter() == null) {
+            throw new IllegalArgumentException("ViewPager does not have a PagerAdapter set");
+        }
+        mCount = mViewPager.getAdapter().getCount();
+        mListTitle.clear();
+        for (int i = 0; i < mCount; i++) {
+            ViewGroup view = (ViewGroup) View.inflate(getContext(), resId, null);
+            mListTitle.add((TextView) view.getChildAt(0));
+            mListTitle.get(mListTitle.size() - 1).setText(mViewPager.getAdapter().getPageTitle(i));
+            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, ViewGroup
+                    .LayoutParams.MATCH_PARENT);
+            layoutParams.weight = 1;
+            view.setLayoutParams(layoutParams);
+            view.setOnClickListener(new clsTabSelect(i));
+            mLayoutMain.addView(view);
+        }
+
+        viewPager.addOnPageChangeListener(cls_Pager);
+        addView(mLayoutMain);
+        addView(mLayoutLine);
+        //默认第一个选中
+        mScrollerLine.moveDegree(mLayoutLine, 0.001f, 0, mCount);
+        mLayoutMain.getChildAt(0).setSelected(true);
+    }
+
+
+    /**
+     * 顶部Tab的监听
+     */
+    private class clsTabSelect implements OnClickListener {
+        private int posiotion = 0;
+
+        public clsTabSelect(int pos) {
+            posiotion = pos;
+        }
+
+        @Override
+        public void onClick(View view) {
+            if (mViewPager == null) {
+                return;
+            }
+            mViewPager.setCurrentItem(posiotion);
+        }
+    }
+
+    /**
+     * 设置下滑线的高和宽
+     *
+     * @param width
+     * @param heigh
+     * @return
+     */
+    public RappTabLayout setLine(int width, int heigh) {
+        mScrollerLine.setLayoutParams(new LinearLayout.LayoutParams(width, heigh));
+        return this;
+    }
+
+    /**
+     * 设置下滑线的margin值。一般用来做间隔
+     *
+     * @param left
+     * @param top
+     * @param right
+     * @param bottom
+     * @return
+     */
+    public RappTabLayout setLineMargin(int left, int top, int right, int bottom) {
+        LinearLayout.LayoutParams layoutParams = ((LinearLayout.LayoutParams) mScrollerLine
+                .getLayoutParams());
+        layoutParams.setMargins(left, top, right, bottom);
+        mScrollerLine.setLayoutParams(layoutParams);
+        return this;
+    }
+
+    /**
+     * 设置下滑线的颜色
+     *
+     * @param color
+     * @return
+     */
+    public RappTabLayout setLineColor(int color) {
+        mScrollerLine.setBackgroundColor(color);
+        return this;
+    }
+
+
+    /**
+     * 滑动监听
+     */
+    private ViewPager.OnPageChangeListener cls_Pager = new ViewPager.OnPageChangeListener() {
+        @Override
+        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+            mScrollerLine.moveDegree(mLayoutLine, positionOffset, position, mCount);
+        }
+
+        @Override
+        public void onPageSelected(int position) {
+            mLayoutMain.getChildAt(mLastSelect).setSelected(false);
+            mLayoutMain.getChildAt(position).setSelected(true);
+            mLastSelect = position;
+        }
+
+        @Override
+        public void onPageScrollStateChanged(int state) {
+
+        }
+    };
+
+}

+ 81 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/page/view/ScrollerLine.java

@@ -0,0 +1,81 @@
+package com.sheep.jiuyan.samllsheep.page.view;
+
+import android.content.Context;
+import android.graphics.Point;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+
+/**
+ * @ Created by Dlg
+ * @ <p>TiTle:  ScrollerLine</p>
+ * @ <p>Description: 滚动下滑线</p>
+ * @ date:  2015/09/16 15:08
+ * @ QQ:    315096953
+ */
+public class ScrollerLine extends View {
+    private int mAllWidth;
+    private int mWidth = 0;
+
+
+    public ScrollerLine(Context context) {
+        super(context);
+        init();
+    }
+
+    public ScrollerLine(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init();
+    }
+
+    public ScrollerLine(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init();
+    }
+
+    /**
+     * 初始化
+     */
+    private void init() {
+        Point point = new Point();
+        WindowManager wm = (WindowManager) getContext()
+                .getSystemService(Context.WINDOW_SERVICE);
+        wm.getDefaultDisplay().getSize(point);
+        mAllWidth = point.x;
+    }
+
+
+    /**
+     * @param viewGroup
+     * @param degree
+     * @param from
+     * @param averagecount 总的有几个滑动范围
+     */
+    public void moveDegree(ViewGroup viewGroup, float degree, int from, int averagecount) {
+        if (degree < 0.0001)
+            return;
+        int aver = mAllWidth / averagecount;
+        int distance = (int) (aver * degree);
+        distance += from * aver + (aver - getRightWidth()) / 2;
+        viewGroup.setPadding(distance, 0, 0, 0);
+    }
+
+
+    /**
+     * 取宽。
+     *
+     * @return
+     */
+    private int getRightWidth() {
+        int width = getWidth();
+        if (width == 0) {
+            width = getMeasuredWidth();
+        }
+        if (width == 0) {
+            width = getLayoutParams().width;
+        }
+        return width;
+    }
+
+}

+ 21 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/utils/BackDo.java

@@ -0,0 +1,21 @@
+package com.sheep.jiuyan.samllsheep.utils;
+
+/**
+ * Created by Dlg on 2015/7/3.
+ */
+
+
+public abstract class BackDo {
+    public void Run() {
+    }
+
+    /**
+     * * 一般用做返回值
+     */
+    public Object recode = "";
+
+    /**
+     * 一般是做初始值
+     */
+    public int code = 0;
+}

+ 71 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/utils/G.java

@@ -0,0 +1,71 @@
+package com.sheep.jiuyan.samllsheep.utils;
+
+import android.content.Context;
+import android.view.Gravity;
+import android.view.ViewGroup;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.page.entry.User;
+
+
+/**
+ * Created by Dlg on 2015/6/17.
+ */
+public class G {
+
+    private static Toast mToast;//全局的Toast
+    public static int HEIGHT = 1280;//屏幕高
+    public static int WIDTH = 720;//屏幕宽
+    public static float DENSITY = 2;//屏幕的Density
+    public static User mUser=new User();
+
+    /**
+     * @param str
+     * @param defaultstr
+     * @return 如果str为null或者长度为零,返回defaultstr,否则返回str
+     */
+    public static final String getString(String str, String defaultstr) {
+        return str == null || str.length() < 1 ? defaultstr : str;
+    }
+
+
+    /**
+     * 返回像素值
+     *
+     * @param dp 将转换的dp值
+     * @return 返回像素植
+     */
+    public static int getRealPix(int dp) {
+        return (int) (dp * G.DENSITY);
+    }
+
+
+    /**
+     * 全局的Toast
+     *
+     * @param context
+     * @param msg      显示的msg,如果为null或者空表示取消显示
+     * @param duration 显示的时长
+     */
+    public static void showToast(Context context, String msg, int duration) {
+        if (mToast == null) {
+            mToast = Toast.makeText(context, msg, duration);
+            mToast.setGravity(Gravity.CENTER, 0, getRealPix(200));//居中靠下
+            if (mToast.getView() instanceof ViewGroup
+                    && ((ViewGroup) mToast.getView()).getChildAt(0) instanceof TextView) {
+                ((TextView) ((ViewGroup) mToast.getView()).getChildAt(0)).setSingleLine(false);
+            }
+        } else if (msg == null || msg.equals(""))
+            mToast.cancel();
+        else {
+            mToast.setText(msg);
+        }
+        mToast.show();
+    }
+
+    public static void showToast(String msg) {
+        showToast(SheepApp.mSheepApp, msg, Toast.LENGTH_SHORT);
+    }
+}

+ 174 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/utils/RecyleViewLoadMoreUtils.java

@@ -0,0 +1,174 @@
+package com.sheep.jiuyan.samllsheep.utils;
+
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.StaggeredGridLayoutManager;
+import android.view.View;
+
+
+/**
+ * @ Created by Dlg
+ * @ <p>TiTle:  RecyleViewLoadMoreUtils</p>
+ * @ <p>Description:RecyleView实现加载更多的工具类</p>
+ * @ date:  2017/12/27 14:41
+ * @ QQ:    315096953
+ */
+
+public class RecyleViewLoadMoreUtils {
+
+    /**
+     * 是否正在载入中
+     */
+    private boolean mIsLoading = false;
+    private final static int LAYOUT_TYPE_LINEAR = 0;
+    private final static int LAYOUT_TYPE_GRID = 1;
+    private final static int LAYOUT_TYPE_STAGGERED_GRID = 2;
+    /**
+     * 加载更多时的操作
+     */
+    private BackDo mBackDo;
+    /**
+     * Layout的类型
+     */
+    private int mIntLayoutManagerType;
+    private RecyclerView.LayoutManager mLayoutManager;
+
+    /**
+     * 设置初始化。
+     *
+     * @param recyclerView
+     * @param backDo
+     */
+    public void setLoadMore(RecyclerView recyclerView, BackDo backDo) {
+        initType(recyclerView);
+        recyclerView.addOnScrollListener(onScrollListener);
+        mBackDo = backDo;
+    }
+
+    /**
+     * 设置载入状态,在正在载入状态下,不会去加载更多
+     *
+     * @param mIsLoading 特殊情况下,如已经不能加载更多时,可强制设置为真即可
+     */
+    public void setmIsLoading(boolean mIsLoading) {
+        this.mIsLoading = mIsLoading;
+    }
+
+    /**
+     * 加载更多的实现
+     */
+    private RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
+        @Override
+        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+            super.onScrollStateChanged(recyclerView, newState);
+            if (newState == RecyclerView.SCROLL_STATE_IDLE
+                    && !mIsLoading) {
+                isArrivedBottom();
+            }
+        }
+
+        @Override
+        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
+            super.onScrolled(recyclerView, dx, dy);
+            if (dy > 0 && !mIsLoading) { //向下滚动
+                isArrivedBottom();
+            }
+        }
+    };
+
+
+    /**
+     * 判断各种类型的view是否到达最底端
+     */
+    private void isArrivedBottom() {
+        int lastVisibleItemPosition = -1;
+        switch (mIntLayoutManagerType) {
+            case LAYOUT_TYPE_LINEAR:
+                lastVisibleItemPosition = ((LinearLayoutManager) mLayoutManager)
+                        .findLastVisibleItemPosition();
+                break;
+            case LAYOUT_TYPE_GRID:
+                lastVisibleItemPosition = ((GridLayoutManager) mLayoutManager)
+                        .findLastVisibleItemPosition();
+                break;
+            case LAYOUT_TYPE_STAGGERED_GRID:
+                StaggeredGridLayoutManager staggeredGridLayoutManager
+                        = (StaggeredGridLayoutManager) mLayoutManager;
+                int[] lastPositions = new int[staggeredGridLayoutManager.getSpanCount()];
+                staggeredGridLayoutManager.findLastVisibleItemPositions(lastPositions);
+                lastVisibleItemPosition = findMax(lastPositions);
+                break;
+        }
+
+        int visibleItemCount = mLayoutManager.getChildCount();
+        int totalItemCount = mLayoutManager.getItemCount();
+        if (!mIsLoading && visibleItemCount > 0 &&
+                lastVisibleItemPosition >= totalItemCount - 1) {
+            mIsLoading = true;
+            mBackDo.Run();
+        }
+    }
+
+    /**
+     * 返回数组中的最大值
+     *
+     * @param lastPositions
+     * @return
+     */
+    private int findMax(int[] lastPositions) {
+        int max = lastPositions[0];
+        for (int value : lastPositions) {
+            if (value > max) {
+                max = value;
+            }
+        }
+        return max;
+    }
+
+
+    /**
+     * 初始化类型
+     */
+    private void initType(RecyclerView recyclerView) {
+        mLayoutManager = recyclerView.getLayoutManager();
+        if (mLayoutManager instanceof LinearLayoutManager) {
+            mIntLayoutManagerType = LAYOUT_TYPE_LINEAR;
+        } else if (mLayoutManager instanceof GridLayoutManager) {
+            mIntLayoutManagerType = LAYOUT_TYPE_GRID;
+        } else if (mLayoutManager instanceof StaggeredGridLayoutManager) {
+            mIntLayoutManagerType = LAYOUT_TYPE_STAGGERED_GRID;
+        } else {
+            throw new RuntimeException("不支持的Layout_Type"+mLayoutManager);
+        }
+    }
+
+
+    /**
+     * 返回是否滑动到底部了
+     *
+     * @param recyclerView
+     * @return
+     */
+    private boolean isArrivedBottom2(RecyclerView recyclerView) {
+        //得到当前显示的最后一个item的view
+        View lastChildView = recyclerView.getLayoutManager()
+                .getChildAt(recyclerView.getLayoutManager().getChildCount() - 1);
+        //得到lastChildView的bottom坐标值
+        int lastChildBottom = lastChildView.getBottom();
+        //得到Recyclerview的底部坐标减去底部padding值,也就是显示内容最底部的坐标
+        int recyclerBottom = recyclerView.getBottom() - recyclerView.getPaddingBottom();
+        //通过这个lastChildView得到这个view当前的position值
+        int lastPosition = recyclerView.getLayoutManager().getPosition(lastChildView);
+
+        //判断lastChildView的bottom值跟recyclerBottom
+        //判断lastPosition是不是最后一个position
+        //如果两个条件都满足则说明是真正的滑动到了底部
+        if (lastChildBottom == recyclerBottom
+                && lastPosition == recyclerView.getLayoutManager().getItemCount() - 1) {
+            return true;
+        }
+        return false;
+    }
+
+}

+ 9 - 8
app/src/main/java/com/sheep/jiuyan/samllsheep/utils/TitleBarUtils.java

@@ -69,11 +69,11 @@ public class TitleBarUtils {
     public TitleBarUtils setTitleFinish(final Activity activity) {
         activity.findViewById(R.id.img_baseactivity_title)
                 .setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                activity.finish();
-            }
-        });
+                    @Override
+                    public void onClick(View view) {
+                        activity.finish();
+                    }
+                });
         return mTitleBarUtils;
     }
 
@@ -85,14 +85,14 @@ public class TitleBarUtils {
      * @param drawableID      如果为0显示透明,如果写-1表示资源不变。-2为Gone,其它为显示该值资源
      * @param onClickListener 如果为null,不改监听
      */
-    public void setTitleListen(Activity activity, int drawableID, View.OnClickListener onClickListener) {
+    public TitleBarUtils setTitleListen(Activity activity, int drawableID, View.OnClickListener onClickListener) {
         TextView titleView = (TextView) activity.findViewById(R.id.txt_baseactivity_title);
-        ImageView imageView= (ImageView) activity.findViewById(R.id.img_baseactivity_title);
+        ImageView imageView = (ImageView) activity.findViewById(R.id.img_baseactivity_title);
         if (drawableID == 0) {
             imageView.setVisibility(View.INVISIBLE);
         } else if (drawableID == -2) {
             imageView.setVisibility(View.GONE);
-            return;
+            return this;
         } else if (drawableID != -1) {
             imageView.setImageResource(drawableID);
         }
@@ -100,6 +100,7 @@ public class TitleBarUtils {
         if (onClickListener != null) {
             imageView.setOnClickListener(onClickListener);
         }
+        return this;
     }
 
 

+ 2 - 2
app/src/main/res/drawable/texe_background_round_theme_left.xml

@@ -5,9 +5,9 @@
         android:bottomRightRadius="25dp"
         android:topRightRadius="25dp"
         />
-    <stroke android:color="@color/white"
+    <stroke android:color="@color/colorAccent"
         android:width="1px"/>
 
-    <solid android:color="@color/theme_sheep_dark"/>
+    <solid android:color="@color/colorPrimaryDark"/>
 
 </shape>

+ 2 - 2
app/src/main/res/drawable/texe_background_round_theme_right.xml

@@ -5,9 +5,9 @@
         android:bottomLeftRadius="25dp"
         android:topLeftRadius="25dp"
         />
-    <stroke android:color="@color/white"
+    <stroke android:color="@color/colorAccent"
         android:width="1px"/>
 
-    <solid android:color="@color/theme_sheep_dark"/>
+    <solid android:color="@color/colorPrimaryDark"/>
 
 </shape>

+ 12 - 0
app/src/main/res/layout/fgt_main_page_offline.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/white"
+    android:orientation="vertical">
+<TextView
+    android:text="dfgsdfgdsfgdfg"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content" />
+</LinearLayout>

+ 165 - 0
app/src/main/res/layout/fgt_main_page_task.xml

@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/white"
+    android:orientation="vertical">
+
+    <android.support.constraint.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:padding="@dimen/content_padding_big">
+
+        <TextView
+            android:id="@+id/txt_fgt_main_page_task_income"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:text="128"
+            android:textColor="@color/orange_text_light"
+            android:textSize="@dimen/text_size_3"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toLeftOf="@+id/txt_fgt_main_page_task_succ"
+            app:layout_constraintTop_toTopOf="parent" />
+
+
+        <TextView
+            android:id="@+id/txt_fgt_main_page_task_succ"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:text="1218"
+            android:textColor="@color/orange_text_light"
+            android:textSize="@dimen/text_size_3"
+            app:layout_constraintLeft_toRightOf="@id/txt_fgt_main_page_task_income"
+            app:layout_constraintRight_toLeftOf="@+id/txt_fgt_main_page_task_remain"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/txt_fgt_main_page_task_remain"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:text="128"
+            android:textColor="@color/orange_text_light"
+            android:textSize="@dimen/text_size_3"
+            app:layout_constraintLeft_toRightOf="@id/txt_fgt_main_page_task_succ"
+            app:layout_constraintRight_toLeftOf="@+id/txt_fgt_main_page_task_history"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/txt_fgt_main_page_task_history"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:text="128"
+            android:textColor="@color/orange_text_light"
+            android:textSize="@dimen/text_size_3"
+            app:layout_constraintLeft_toRightOf="@id/txt_fgt_main_page_task_remain"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/content_padding_small"
+            android:text="今日收入"
+            android:textColor="@color/black_text_gray"
+            android:textSize="@dimen/text_size_2"
+            app:layout_constraintLeft_toLeftOf="@id/txt_fgt_main_page_task_income"
+            app:layout_constraintRight_toRightOf="@id/txt_fgt_main_page_task_income"
+            app:layout_constraintTop_toBottomOf="@id/txt_fgt_main_page_task_income" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/content_padding_small"
+            android:text="今日完成"
+            android:textColor="@color/black_text_gray"
+            android:textSize="@dimen/text_size_2"
+            app:layout_constraintLeft_toLeftOf="@id/txt_fgt_main_page_task_succ"
+            app:layout_constraintRight_toRightOf="@id/txt_fgt_main_page_task_succ"
+            app:layout_constraintTop_toBottomOf="@id/txt_fgt_main_page_task_income" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/content_padding_small"
+            android:text="剩余次数"
+            android:textColor="@color/black_text_gray"
+            android:textSize="@dimen/text_size_2"
+            app:layout_constraintLeft_toLeftOf="@id/txt_fgt_main_page_task_remain"
+            app:layout_constraintRight_toRightOf="@id/txt_fgt_main_page_task_remain"
+            app:layout_constraintTop_toBottomOf="@id/txt_fgt_main_page_task_income" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/content_padding_small"
+            android:text="任务记录"
+            android:textColor="@color/black_text_gray"
+            android:textSize="@dimen/text_size_2"
+            app:layout_constraintLeft_toLeftOf="@id/txt_fgt_main_page_task_history"
+            app:layout_constraintRight_toRightOf="@id/txt_fgt_main_page_task_history"
+            app:layout_constraintTop_toBottomOf="@id/txt_fgt_main_page_task_income" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="horizontal"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <Space
+                android:layout_width="0dp"
+                android:layout_height="1px"
+                android:layout_weight="1" />
+
+            <View
+                android:layout_width="1px"
+                android:layout_height="25dp"
+                android:background="@color/sheep_red" />
+
+            <Space
+                android:layout_width="0dp"
+                android:layout_height="1px"
+                android:layout_weight="1" />
+
+            <View
+                android:layout_width="1px"
+                android:layout_height="25dp"
+                android:background="@color/sheep_red" />
+
+            <Space
+                android:layout_width="0dp"
+                android:layout_height="1px"
+                android:layout_weight="1" />
+
+            <View
+                android:layout_width="1px"
+                android:layout_height="25dp"
+                android:background="@color/sheep_red" />
+
+            <Space
+                android:layout_width="0dp"
+                android:layout_height="1px"
+                android:layout_weight="1" />
+
+        </LinearLayout>
+    </android.support.constraint.ConstraintLayout>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/content_padding"
+        android:background="@color/background_light_gray" />
+
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/recy_fgt_main_page_task"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+    </android.support.v7.widget.RecyclerView>
+
+</LinearLayout>

+ 83 - 5
app/src/main/res/layout/main_activity.xml

@@ -1,14 +1,92 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:orientation="vertical">
 
-    <com.jcodecraeer.xrecyclerview.XRecyclerView
-        android:id="@+id/tasks"
+    <include layout="@layout/title" />
+
+    <android.support.constraint.ConstraintLayout
         android:layout_width="match_parent"
-        android:layout_height="match_parent">
-    </com.jcodecraeer.xrecyclerview.XRecyclerView>
+        android:layout_height="wrap_content"
+        android:background="@color/colorPrimary"
+        android:paddingTop="@dimen/content_padding_small">
+
+        <TextView
+            android:id="@+id/txt_main_activity_money"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="xxx元"
+            android:textColor="@color/black_text_gray"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:background="@drawable/texe_background_round_theme_left"
+            android:gravity="center_vertical"
+            android:orientation="horizontal"
+            android:paddingBottom="@dimen/content_padding_small"
+            android:paddingLeft="@dimen/content_padding"
+            android:paddingRight="@dimen/content_padding"
+            android:paddingTop="@dimen/content_padding_small"
+            app:layout_constraintTop_toBottomOf="@id/txt_main_activity_money">
+
+            <ImageView
+                android:id="@+id/img_user"
+                android:layout_width="20dp"
+                android:layout_height="20dp"
+                android:layout_centerVertical="true"
+                android:src="@color/colorAccent" />
+
+            <TextView
+                android:id="@+id/txt_main_activity_nick"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/content_padding_small"
+                android:text="陈大狗"
+                android:textColor="@color/theme_sheep_dark"
+                android:textSize="@dimen/text_size_2" />
+        </LinearLayout>
+
+
+        <TextView
+            android:id="@+id/tv_withdraw"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:background="@drawable/texe_background_round_theme_right"
+            android:gravity="center_vertical"
+            android:paddingBottom="@dimen/content_padding_small"
+            android:paddingLeft="@dimen/content_padding"
+            android:paddingTop="@dimen/content_padding_small"
+            android:text="现金提现"
+            android:textColor="@color/theme_sheep_dark"
+            android:textSize="@dimen/text_size_2"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/txt_main_activity_money" />
+
+        <com.sheep.jiuyan.samllsheep.page.view.RappTabLayout
+            android:id="@+id/tab_main_activity"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/layout_heigh_default"
+            android:layout_marginTop="@dimen/content_padding_big"
+            app:layout_constraintTop_toBottomOf="@id/tv_withdraw"></com.sheep.jiuyan.samllsheep.page.view.RappTabLayout>
+
+        <android.support.v4.view.ViewPager
+            android:id="@+id/viewpager_main_activity"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@color/white"
+            app:layout_constraintTop_toBottomOf="@id/tab_main_activity">
+
+        </android.support.v4.view.ViewPager>
+
+    </android.support.constraint.ConstraintLayout>
+
+
 
 </LinearLayout>

+ 15 - 0
app/src/main/res/layout/tab_ripple.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:background="@color/translate">
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_gravity="center"
+        android:gravity="center"
+        android:padding="0dp"
+        android:textColor="@color/black_text_deep"
+        android:textSize="@dimen/text_size_3" />
+</FrameLayout>

+ 0 - 8
app/src/main/res/layout/task_head.xml

@@ -1,18 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:background="@color/background_light_gray"
     android:orientation="vertical">
 
-    <EditText
-        style="@style/style_edt"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:hint="可可要"
-        android:text="年年年" />
-
     <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="120dp"

+ 3 - 1
app/src/main/res/layout/title.xml

@@ -23,7 +23,8 @@
         android:gravity="center"
         android:text="@string/app_name"
         android:textColor="@color/black_text_deep"
-        android:textSize="@dimen/text_size_4" />
+        android:textSize="@dimen/text_size_4"
+        android:textStyle="bold" />
 
 
     <!--右边按钮-->
@@ -49,6 +50,7 @@
         android:layout_height="match_parent"
         android:layout_alignParentRight="true"
         android:layout_centerVertical="true"
+        android:background="@color/translate"
         android:gravity="center"
         android:minWidth="@dimen/layout_heigh_default"
         android:visibility="gone" />

+ 14 - 1
app/src/main/res/values/common.xml

@@ -11,7 +11,7 @@
     <color name="black_text_light">#bbbbbb</color>
     <color name="orange_text_light">#ef712c</color>
     <!--APP中的主要非白色背景的底色-->
-    <color name="background_light_gray">#f5f5f5</color>
+    <color name="background_light_gray">#efefef</color>
     <!--分割线的统一颜色-->
     <color name="divier">#cdcdcd</color>
 
@@ -54,7 +54,20 @@
     </style>
 
     <!--APP中的主要内容的各种间距值pading默认值和较大值-->
+    <dimen name="content_padding_small">6dp</dimen>
     <dimen name="content_padding">12dp</dimen>
     <dimen name="content_padding_big">18dp</dimen>
 
+
+    <!--下面的tagid用于设置tag使用-->
+    <item name="tagid1" type="id" />
+    <item name="tagid2" type="id" />
+    <item name="tagid3" type="id" />
+    <item name="tagid4" type="id" />
+    <item name="tagid5" type="id" />
+    <item name="tagid6" type="id" />
+    <item name="tagid7" type="id" />
+    <item name="tagid8" type="id" />
+
+
 </resources>

+ 8 - 0
app/src/main/res/values/view_style.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <declare-styleable name="ListMore">
+        <attr name="dividerDrawable" format="reference" />
+        <attr name="listSelector" format="reference" />
+        <attr name="dividerHeight" format="dimension" />
+    </declare-styleable>
+</resources>