自定义签到功能

来源:互联网 发布:gis软件开发基础 编辑:程序博客网 时间:2024/05/01 21:08

自定义签到功能(copy到项目该删的删该改的改)


1、实现思路:GridView显示日历,条项点击事件处理签到逻辑(难点在如何绘制日历,并让日期与星期,月份一致)

2、上代码:

一、xml文件:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.whzg.zbjy.homepage.TestActivity">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:padding="2dp"        android:orientation="vertical"        >        <android.support.v7.widget.Toolbar            android:id="@+id/signin_toolbar"            android:layout_width="match_parent"            android:layout_height="wrap_content">            <TextView                android:id="@+id/signin_score"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_gravity="right"                android:paddingRight="20dp"                android:textSize="18sp"                android:text="@string/signin_score" />        </android.support.v7.widget.Toolbar>        <RelativeLayout            android:layout_width="match_parent"            android:layout_height="40dp"            >            <TextView                android:id="@+id/tv_date"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_centerInParent="true"                android:textColor="#2fbbef"                android:textSize="15sp"                android:text="2016-7-16"                />        </RelativeLayout>        <LinearLayout            android:layout_width="match_parent"            android:layout_height="40dp"            >            <TextView                android:layout_width="40dp"                android:layout_height="40dp"                android:layout_weight="1"                android:gravity="center"                android:text="一"                android:textSize="15sp"                android:textColor="#888"                />            <TextView                android:layout_width="40dp"                android:layout_height="40dp"                android:layout_weight="1"                android:gravity="center"                android:text="二"                android:textSize="15sp"                android:textColor="#888"                />            <TextView                android:layout_width="40dp"                android:layout_height="40dp"                android:layout_weight="1"                android:gravity="center"                android:text="三"                android:textSize="15sp"                android:textColor="#888"                />            <TextView                android:layout_width="40dp"                android:layout_height="40dp"                android:layout_weight="1"                android:gravity="center"                android:text="四"                android:textSize="15sp"                android:textColor="#888"                />            <TextView                android:layout_width="40dp"                android:layout_height="40dp"                android:layout_weight="1"                android:gravity="center"                android:text="五"                android:textSize="15sp"                android:textColor="#888"                />            <TextView                android:layout_width="40dp"                android:layout_height="40dp"                android:layout_weight="1"                android:gravity="center"                android:text="六"                android:textSize="15sp"                android:textColor="#888"                />            <TextView                android:layout_width="40dp"                android:layout_height="40dp"                android:layout_weight="1"                android:gravity="center"                android:text="日"                android:textSize="15sp"                android:textColor="#888"                />        </LinearLayout>        <GridView            android:id="@+id/gv_sign_date"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:clickable="true"            android:clipChildren="true"            android:columnWidth="30dp"            android:listSelector="@null"            android:numColumns="7"            android:paddingBottom="1dp"            android:stretchMode="columnWidth"            android:verticalSpacing="1dp"            ></GridView>        <TextView            android:layout_width="match_parent"            android:layout_height="1dp"            android:background="#dbdbdb"            />        <Button            android:id="@+id/siginin_change"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:background="@color/red"            android:text="@string/signin_change"            android:textColor="@color/white" />        <TextView            android:id="@+id/signin_login"            android:layout_width="match_parent"            android:layout_height="180dp"            android:text="签到说明:" />    </LinearLayout></RelativeLayout>

二、java代码:

modle类:

package com.whzg.zbjy.modle;import java.util.List;/** *  */public class SigninInfoResponseBean {    /**     * Error : null     * Data : {"IsSignIn":true,"DataArr":[10,14],"runningDay":1,"integration":2}     */    private Object Error;    /**     * IsSignIn : true     * DataArr : [10,14]     * runningDay : 1     * integration : 2     */    private DataBean Data;    public Object getError() {        return Error;    }    public void setError(Object Error) {        this.Error = Error;    }    public DataBean getData() {        return Data;    }    public void setData(DataBean Data) {        this.Data = Data;    }    public static class DataBean {        private boolean IsSignIn;        private int runningDay;        private int integration;        private List<Integer> DataArr;        public boolean isIsSignIn() {            return IsSignIn;        }        public void setIsSignIn(boolean IsSignIn) {            this.IsSignIn = IsSignIn;        }        public int getRunningDay() {            return runningDay;        }        public void setRunningDay(int runningDay) {            this.runningDay = runningDay;        }        public int getIntegration() {            return integration;        }        public void setIntegration(int integration) {            this.integration = integration;        }        public List<Integer> getDataArr() {            return DataArr;        }        public void setDataArr(List<Integer> DataArr) {            this.DataArr = DataArr;        }    }}

Application:

package com.whzg.zbjy.ui;import android.app.Application;import android.content.Context;import android.widget.Toast;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.whzg.zbjy.dbutils.SharedPreferencesUtils;import java.util.HashMap;import java.util.Map;import cn.smssdk.SMSSDK;/** *  */public class MyApplication extends Application {    private Map map;    public static String CURRENTUSER = "currentuser";    public static String USERNAME="username";    public static String PASSWORD="password";    public static String NAME="name";    public static String SEX="sex";    public static String ADDRESS="address";    public static String SHOOL="shool";    public static String ISLOGIN="islogin";    public static String HEADIMG="headimg";    public static String SIGNINSCORE="signinscore";    @Override    public void onCreate() {        super.onCreate();        SMSSDK.initSDK(this, "18a59f3fd6d52", "b7436f6c091acf826e38abf79e215472");        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this).build();        ImageLoader.getInstance().init(config);//        map = new HashMap();//        //默认的当前账号信息//        map.put("username", "1");//        map.put("password","1");//        map.put("name","未登录");//        map.put("sex","未设置");//        map.put("address","未设置");//        map.put("shool", "未设置");//        map.put("islogin","-1");//0未登录1登录  -1默认状态//        new SharedPreferencesUtils().saveDataToSharedPreferences(this, CURRENTUSER, map);    }}

SharedPreference:

package com.whzg.zbjy.dbutils;import android.content.Context;import android.content.SharedPreferences;import com.whzg.zbjy.ui.MyApplication;import java.util.HashMap;import java.util.Map;/** *  */public class SharedPreferencesUtils {    /**     * 获取Sharedpreference数据     * @param context     * @param fileName     * @return     */    public Map<String, ?> readDataFromSharedPreferences(Context context, String fileName) {        Map<String, ?> map;           //Map对象,用于存储读取到的数据        SharedPreferences sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE);        map = sharedPreferences.getAll();        return map;    }    /**     * 保存Sharedpreference数据     * @param context     * @param fileName     * @param map     * @return     */    public boolean saveDataToSharedPreferences(Context context, String fileName,Map<String,String> map) {        boolean isSaveDataSuccess = false;           //存储数据成功标志位        SharedPreferences sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE);        SharedPreferences.Editor edit = sharedPreferences.edit();    //创建SharedPreferences.Editor对象        if (map == null){            return isSaveDataSuccess;        }        for (String key:map.keySet()){            edit.putString(key, map.get(key));        }        isSaveDataSuccess = edit.commit();           //提交存储数据        return isSaveDataSuccess;    }}

BaseActivity:

package com.whzg.zbjy.ui;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public abstract class BaseActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);    }    /**     * 执行findViewById()     */    public abstract void findView();    /**     * 执行初始化数据     */    public abstract void initData();    /**     * 执行View控件的初始化     */    public abstract void initView();    /**     * 对控件设置点击事件     */    public abstract void initClicked();}

联网utils:

package com.whzg.zbjy.httputils;import android.content.Context;import android.os.Handler;import android.os.Message;import android.util.Log;import android.widget.Toast;import com.google.gson.Gson;import com.whzg.zbjy.dbutils.SharedPreferencesUtils;import com.whzg.zbjy.modle.ChangeInfoResponseBean;import com.whzg.zbjy.modle.ChangePasswordResponseBean;import com.whzg.zbjy.modle.GetHomeworkResponseBean;import com.whzg.zbjy.modle.LoginResponseBean;import com.whzg.zbjy.modle.RegistResponseBean;import com.whzg.zbjy.modle.SigninInfoResponseBean;import com.whzg.zbjy.modle.TraditionBean;import com.whzg.zbjy.ui.MyApplication;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.File;import java.io.IOException;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import java.util.List;import java.util.UUID;import okhttp3.Call;import okhttp3.Callback;import okhttp3.MediaType;import okhttp3.MultipartBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;/** *  */public class HttpUtils {       /**     * okhttp异步get方法     */    public void getAsynHttp() {        OkHttpClient mOkHttpClient = new OkHttpClient();        Request.Builder requestBuilder = new Request.Builder().url("http://www.baidu.com");        //可以省略,默认是GET请求        requestBuilder.method("GET", null);        Request request = requestBuilder.build();        Call mcall = mOkHttpClient.newCall(request);        mcall.enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {            }            @Override            public void onResponse(Call call, Response response) throws IOException {                if (null != response.cacheResponse()) {                    String str = response.cacheResponse().toString();                    Log.i("wangshu", "cache---" + str);                } else {                    response.body().string();                    String str = response.networkResponse().toString();                    Log.i("wangshu", "network---" + str);                }//                runOnUiThread(new Runnable() {//                    @Override//                    public void run() {//                        Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show();//                    }//                });            }        });    }      public void getSignininfo(final String url, final Handler handler) {        new Thread(){            @Override            public void run() {                super.run();                SigninInfoResponseBean signinInfoResponseBean = null;                try {                    OkHttpClient client = new OkHttpClient();                    Request request = new Request.Builder().url(url).build();                    okhttp3.Response response = client.newCall(request).execute();                    String str = response.body().string();                    str = str.substring(1, str.length() - 1);                    str = str.replace("\\\"", "\"");                    str = str.replace("\\/", "/");                    Gson gson = new Gson();                    signinInfoResponseBean = gson.fromJson(str, SigninInfoResponseBean.class);//                    Toast.makeText(context,signinInfoResponseBean.toString(),Toast.LENGTH_SHORT).show();                    Log.i("ssss",signinInfoResponseBean.toString());                    Message message = new Message();                    message.what =1;                    message.obj = signinInfoResponseBean;                    handler.sendMessage(message);                } catch (IOException e) {                    e.printStackTrace();                }            }        }.start();    }    /**     *今日签到方法     * @param url 签到url     * @param handler 签到处理类     */public void todaySignin(final String url, final Handler handler){    new Thread(){        @Override        public void run() {            super.run();//            SigninInfoResponseBean signinInfoResponseBean = null;            try {                OkHttpClient client = new OkHttpClient();                Request request = new Request.Builder().url(url).build();                okhttp3.Response response = client.newCall(request).execute();                String str = response.body().string();                str = str.substring(1, str.length() - 1);                str = str.replace("\\\"", "\"");                str = str.replace("\\/", "/");                Gson gson = new Gson();//                signinInfoResponseBean = gson.fromJson(str, SigninInfoResponseBean.class);//                    Toast.makeText(context,signinInfoResponseBean.toString(),Toast.LENGTH_SHORT).show();//                Log.i("ssss",signinInfoResponseBean.toString());                Message message = new Message();                message.what =2;//                message.obj = signinInfoResponseBean;                handler.sendMessage(message);            } catch (IOException e) {                e.printStackTrace();            }        }    }.start();}}

color:

<?xml version="1.0" encoding="utf-8"?><resources>    <color name="colorPrimary">#3F51B5</color>    <color name="colorPrimaryDark">#303F9F</color>    <color name="colorAccent">#FF4081</color><color name="header_normal">#ffe74c3c</color>    <color name="header_pressed">#ffc0392b</color>    <color name="menu_section_header">#FFDDDDDD</color>    <color name="white">#ffffff</color> <!-- 白色 -->    <color name="ivory">#fffff0</color> <!-- 象牙色 -->    <color name="lightyellow">#ffffe0</color> <!-- 亮黄色 -->    <color name="yellow">#ffff00</color> <!-- 黄色 -->    <color name="snow">#fffafa</color> <!-- 雪白色 -->    <color name="floralwhite">#fffaf0</color> <!-- 花白色 -->    <color name="lemonchiffon">#fffacd</color> <!-- 柠檬绸色 -->    <color name="cornsilk">#fff8dc</color> <!-- 米绸色 -->    <color name="seaShell">#fff5ee</color> <!-- 海贝色 -->    <color name="lavenderblush">#fff0f5</color> <!-- 淡紫红 -->    <color name="papayawhip">#ffefd5</color> <!-- 番木色 -->    <color name="blanchedalmond">#ffebcd</color> <!-- 白杏色 -->    <color name="mistyrose">#ffe4e1</color> <!-- 浅玫瑰色 -->    <color name="bisque">#ffe4c4</color> <!-- 桔黄色 -->    <color name="moccasin">#ffe4b5</color> <!-- 鹿皮色 -->    <color name="navajowhite">#ffdead</color> <!-- 纳瓦白 -->    <color name="peachpuff">#ffdab9</color> <!-- 桃色 -->    <color name="gold">#ffd700</color> <!-- 金色 -->    <color name="pink">#ffc0cb</color> <!-- 粉红色 -->    <color name="lightpink">#ffb6c1</color> <!-- 亮粉红色 -->    <color name="orange">#ffa500</color> <!-- 橙色 -->    <color name="lightsalmon">#ffa07a</color> <!-- 亮肉色 -->    <color name="darkorange">#ff8c00</color> <!-- 暗桔黄色 -->    <color name="coral">#ff7f50</color> <!-- 珊瑚色 -->    <color name="hotpink">#ff69b4</color> <!-- 热粉红色 -->    <color name="tomato">#ff6347</color> <!-- 西红柿色 -->    <color name="orangered">#ff4500</color> <!-- 红橙色 -->    <color name="deeppink">#ff1493</color> <!-- 深粉红色 -->    <color name="fuchsia">#ff00ff</color> <!-- 紫红色 -->    <color name="magenta">#ff00ff</color> <!-- 红紫色 -->    <color name="red">#a50319</color> <!-- 红色 -->    <color name="oldlace">#fdf5e6</color> <!-- 老花色 -->    <color name="lightgoldenrodyellow">#fafad2</color> <!-- 亮金黄色 -->    <color name="linen">#faf0e6</color> <!-- 亚麻色 -->    <color name="antiquewhite">#faebd7</color> <!-- 古董白 -->    <color name="salmon">#fa8072</color> <!-- 鲜肉色 -->    <color name="ghostwhite">#f8f8ff</color> <!-- 幽灵白 -->    <color name="mintcream">#f5fffa</color> <!-- 薄荷色 -->    <color name="whitesmoke">#f5f5f5</color> <!-- 烟白色 -->    <color name="beige">#f5f5dc</color> <!-- 米色 -->    <color name="wheat">#f5deb3</color> <!-- 浅黄色 -->    <color name="sandybrown">#f4a460</color> <!-- 沙褐色 -->    <color name="azure">#f0ffff</color> <!-- 天蓝色 -->    <color name="honeydew">#f0fff0</color> <!-- 蜜色 -->    <color name="aliceblue">#f0f8ff</color> <!-- 艾利斯兰 -->    <color name="khaki">#f0e68c</color> <!-- 黄褐色 -->    <color name="lightcoral">#f08080</color> <!-- 亮珊瑚色 -->    <color name="palegoldenrod">#eee8aa</color> <!-- 苍麒麟色 -->    <color name="violet">#ee82ee</color> <!-- 紫罗兰色 -->    <color name="darksalmon">#e9967a</color> <!-- 暗肉色 -->    <color name="lavender">#e6e6fa</color> <!-- 淡紫色 -->    <color name="lightcyan">#e0ffff</color> <!-- 亮青色 -->    <color name="burlywood">#deb887</color> <!-- 实木色 -->    <color name="plum">#dda0dd</color> <!-- 洋李色 -->    <color name="gainsboro">#dcdcdc</color> <!-- 淡灰色 -->    <color name="crimson">#dc143c</color> <!-- 暗深红色 -->    <color name="palevioletred">#db7093</color> <!-- 苍紫罗兰色 -->    <color name="goldenrod">#daa520</color> <!-- 金麒麟色 -->    <color name="orchid">#da70d6</color> <!-- 淡紫色 -->    <color name="thistle">#d8bfd8</color> <!-- 蓟色 -->    <color name="lightgray">#d3d3d3</color> <!-- 亮灰色 -->    <color name="lightgrey">#d3d3d3</color> <!-- 亮灰色 -->    <color name="tan">#d2b48c</color> <!-- 茶色 -->    <color name="chocolate">#d2691e</color> <!-- 巧可力色 -->    <color name="peru">#cd853f</color> <!-- 秘鲁色 -->    <color name="indianred">#cd5c5c</color> <!-- 印第安红 -->    <color name="mediumvioletred">#c71585</color> <!-- 中紫罗兰色 -->    <color name="silver">#c0c0c0</color> <!-- 银色 -->    <color name="darkkhaki">#bdb76b</color> <!-- 暗黄褐色 -->    <color name="rosybrown">#bc8f8f</color> <!-- 褐玫瑰红 -->    <color name="mediumorchid">#ba55d3</color> <!-- 中粉紫色 -->    <color name="darkgoldenrod">#b8860b</color> <!-- 暗金黄色 -->    <color name="firebrick">#b22222</color> <!-- 火砖色 -->    <color name="powderblue">#b0e0e6</color> <!-- 粉蓝色 -->    <color name="lightsteelblue">#b0c4de</color> <!-- 亮钢兰色 -->    <color name="paleturquoise">#afeeee</color> <!-- 苍宝石绿 -->    <color name="greenyellow">#adff2f</color> <!-- 黄绿色 -->    <color name="lightblue">#add8e6</color> <!-- 亮蓝色 -->    <color name="darkgray">#a9a9a9</color> <!-- 暗灰色 -->    <color name="darkgrey">#a9a9a9</color> <!-- 暗灰色 -->    <color name="brown">#a52a2a</color> <!-- 褐色 -->    <color name="sienna">#a0522d</color> <!-- 赭色 -->    <color name="darkorchid">#9932cc</color> <!-- 暗紫色 -->    <color name="palegreen">#98fb98</color> <!-- 苍绿色 -->    <color name="darkviolet">#9400d3</color> <!-- 暗紫罗兰色 -->    <color name="mediumpurple">#9370db</color> <!-- 中紫色 -->    <color name="lightgreen">#90ee90</color> <!-- 亮绿色 -->    <color name="darkseagreen">#8fbc8f</color> <!-- 暗海兰色 -->    <color name="saddlebrown">#8b4513</color> <!-- 重褐色 -->    <color name="darkmagenta">#8b008b</color> <!-- 暗洋红 -->    <color name="darkred">#8b0000</color> <!-- 暗红色 -->    <color name="blueviolet">#8a2be2</color> <!-- 紫罗兰蓝色 -->    <color name="lightskyblue">#87cefa</color> <!-- 亮天蓝色 -->    <color name="skyblue">#87ceeb</color> <!-- 天蓝色 -->    <color name="gray">#808080</color> <!-- 灰色 -->    <color name="grey">#808080</color> <!-- 灰色 -->    <color name="olive">#808000</color> <!-- 橄榄色 -->    <color name="purple">#800080</color> <!-- 紫色 -->    <color name="maroon">#800000</color> <!-- 粟色 -->    <color name="aquamarine">#7fffd4</color> <!-- 碧绿色 -->    <color name="chartreuse">#7fff00</color> <!-- 黄绿色 -->    <color name="lawngreen">#7cfc00</color> <!-- 草绿色 -->    <color name="mediumslateblue">#7b68ee</color> <!-- 中暗蓝色 -->    <color name="lightslategray">#778899</color> <!-- 亮蓝灰 -->    <color name="lightslategrey">#778899</color> <!-- 亮蓝灰 -->    <color name="slategray">#708090</color> <!-- 灰石色 -->    <color name="slategrey">#708090</color> <!-- 灰石色 -->    <color name="olivedrab">#6b8e23</color> <!-- 深绿褐色 -->    <color name="slateblue">#6a5acd</color> <!-- 石蓝色 -->    <color name="dimgray">#696969</color> <!-- 暗灰色 -->    <color name="dimgrey">#696969</color> <!-- 暗灰色 -->    <color name="mediumaquamarine">#66cdaa</color> <!-- 中绿色 -->    <color name="cornflowerblue">#6495ed</color> <!-- 菊兰色 -->    <color name="cadetblue">#5f9ea0</color> <!-- 军兰色 -->    <color name="darkolivegreen">#556b2f</color> <!-- 暗橄榄绿 -->    <color name="indigo">#4b0082</color> <!-- 靛青色 -->    <color name="mediumturquoise">#48d1cc</color> <!-- 中绿宝石 -->    <color name="darkslateblue">#483d8b</color> <!-- 暗灰蓝色 -->    <color name="steelblue">#4682b4</color> <!-- 钢兰色 -->    <color name="royalblue">#4169e1</color> <!-- 皇家蓝 -->    <color name="turquoise">#40e0d0</color> <!-- 青绿色 -->    <color name="mediumseagreen">#3cb371</color> <!-- 中海蓝 -->    <color name="limegreen">#32cd32</color> <!-- 橙绿色 -->    <color name="darkslategray">#2f4f4f</color> <!-- 暗瓦灰色 -->    <color name="darkslategrey">#2f4f4f</color> <!-- 暗瓦灰色 -->    <color name="seagreen">#2e8b57</color> <!-- 海绿色 -->    <color name="forestgreen">#228b22</color> <!-- 森林绿 -->    <color name="lightseagreen">#20b2aa</color> <!-- 亮海蓝色 -->    <color name="dodgerblue">#1e90ff</color> <!-- 闪兰色 -->    <color name="midnightblue">#191970</color> <!-- 中灰兰色 -->    <color name="aqua">#00ffff</color> <!-- 浅绿色 -->    <color name="cyan">#00ffff</color> <!-- 青色 -->    <color name="springgreen">#00ff7f</color> <!-- 春绿色 -->    <color name="lime">#00ff00</color> <!-- 酸橙色 -->    <color name="mediumspringgreen">#00fa9a</color> <!-- 中春绿色 -->    <color name="darkturquoise">#00ced1</color> <!-- 暗宝石绿 -->    <color name="deepskyblue">#00bfff</color> <!-- 深天蓝色 -->    <color name="darkcyan">#008b8b</color> <!-- 暗青色 -->    <color name="teal">#008080</color> <!-- 水鸭色 -->    <color name="green">#008000</color> <!-- 绿色 -->    <color name="darkgreen">#006400</color> <!-- 暗绿色 -->    <color name="blue">#0000ff</color> <!-- 蓝色 -->    <color name="mediumblue">#0000cd</color> <!-- 中兰色 -->    <color name="darkblue">#00008b</color> <!-- 暗蓝色 -->    <color name="navy">#000080</color> <!-- 海军色 -->    <color name="black">#000000</color> <!-- 黑色 --></resources>


最重要的activity:(中间有跳转二级页面注释掉就行,url的拼接使用项目的签到url)
package com.whzg.zbjy.homepage;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.widget.Toolbar;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.GridView;import android.widget.TextView;import android.widget.Toast;import com.whzg.zbjy.R;import com.whzg.zbjy.dbutils.SharedPreferencesUtils;import com.whzg.zbjy.httputils.HttpUtils;import com.whzg.zbjy.modle.SigninInfoResponseBean;import com.whzg.zbjy.ui.BaseActivity;import com.whzg.zbjy.ui.MyApplication;import java.util.Calendar;import java.util.HashMap;import java.util.Map;public class SignInActivity extends BaseActivity {    private Toolbar toolbar;    private TextView signin_score, tv_date, signin_login;    private GridView gv_sign_date;    private Button siginin_change;    private SigninInfoResponseBean signinInfoResponseBean = null;    private MyCalenderAdapter myCalenderAdapter = null;    private Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what) {                case 1://获取签到信息                    signinInfoResponseBean = (SigninInfoResponseBean) msg.obj;//                    if (null != signinInfoResponseBean) {//                        Toast.makeText(SignInActivity.this, signinInfoResponseBean.toString(), Toast.LENGTH_SHORT).show();//                    }                    //在当前用户文件中创建积分项存储积分信息                    Map<String,String> map = new HashMap<>();                    map.put(MyApplication.SIGNINSCORE, String.valueOf(signinInfoResponseBean.getData().getIntegration()));                    new SharedPreferencesUtils().saveDataToSharedPreferences(SignInActivity.this,MyApplication.CURRENTUSER,map);                    myCalenderAdapter.notifyDataSetChanged();//刷新适配器                    break;                case 2://今日签到//                    Toast.makeText(SignInActivity.this, "22222222", Toast.LENGTH_SHORT).show();                    break;            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_sign_in);        findView();        initData();        initView();        initClicked();    }    @Override    public void findView() {        toolbar = (Toolbar) findViewById(R.id.signin_toolbar);        //我的积分        signin_score = (TextView) findViewById(R.id.signin_score);        //所选日期        tv_date = (TextView) findViewById(R.id.tv_date);        //签到说明        signin_login = (TextView) findViewById(R.id.signin_login);        //日历实体        gv_sign_date = (GridView) findViewById(R.id.gv_sign_date);        //积分兑换        siginin_change = (Button) findViewById(R.id.siginin_change);    }    @Override    public void initData() {        //得到当前登录的手机号        String phone = (String) new SharedPreferencesUtils().readDataFromSharedPreferences(SignInActivity.this, MyApplication.CURRENTUSER).get(MyApplication.USERNAME);//        Toast.makeText(SignInActivity.this,phone,Toast.LENGTH_SHORT).show();        new HttpUtils().getSignininfo(getResources().getString(R.string.get_signininfo) + phone, handler);    }    @Override    public void initView() {        toolbar.setNavigationIcon(R.drawable.back);        toolbar.setTitle("");        toolbar.setSubtitle("");        setSupportActionBar(toolbar);        toolbar.setNavigationOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                SignInActivity.this.finish();            }        });        //签到说明        signin_login.setText("签到说明:\n\n连续签到一天得一分;\n连续签到二天得二分;\n连续签到三天得三分;\n······");        //当前日期        tv_date.setText(Calendar.getInstance().get(Calendar.YEAR) + "-" + (Calendar.getInstance().get(Calendar.MONTH) + 1) + "-" + Calendar.getInstance().get(Calendar.DAY_OF_MONTH));        myCalenderAdapter = new MyCalenderAdapter();        gv_sign_date.setAdapter(myCalenderAdapter);        //积分兑换        siginin_change.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                startActivity(new Intent(SignInActivity.this,SignIn2Activity.class));            }        });        signin_score.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                startActivity(new Intent(SignInActivity.this,SignIn2Activity.class));            }        });    }    @Override    public void initClicked() {        gv_sign_date.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                int i = (int) view.getTag();                if (i != 0) {//设置选中的日期                    tv_date.setText(Calendar.getInstance().get(Calendar.YEAR) + "-" + (Calendar.getInstance().get(Calendar.MONTH) + 1) + "-" + i);                }                if (i == Calendar.getInstance().get(Calendar.DAY_OF_MONTH)) {//点击当前日期则执行签到操作                    String phone = (String) new SharedPreferencesUtils().readDataFromSharedPreferences(SignInActivity.this, MyApplication.CURRENTUSER).get(MyApplication.USERNAME);                    int runningday = 0;//连续签到数                    int plusIntegral = 1;//签到积分                    int endday = signinInfoResponseBean.getData().getDataArr().get(signinInfoResponseBean.getData().getDataArr().size() - 1);                    if (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == endday + 1) {//判断是否连续签到                        runningday = signinInfoResponseBean.getData().getRunningDay() + 1;                        plusIntegral = runningday;                    }                    if (runningday>30){//当连续签到数大于30时重新计数                        runningday=0;                        plusIntegral=1;                    }                    new HttpUtils().todaySignin(getResources().getString(R.string.today_signin) + phone + "," + runningday + "," + plusIntegral, handler);                    TextView textView = (TextView) view.findViewById(R.id.siginin_gv_item_tv);                    textView.setBackgroundColor(getResources().getColor(R.color.chartreuse));                }            }        });    }    class MyCalenderAdapter extends BaseAdapter {        private int firstColumn = 0, count = 0;        private Calendar calendar;        private int mYear, mMonth, mDay, mWay, mHour, mMinute;        public MyCalenderAdapter() {            this.calendar = Calendar.getInstance();//日历实例            this.firstColumn = getColumnIndex(1);//月份第一天的列号            int month = calendar.get(Calendar.MONTH) + 1;            this.count = getDayNumOfMonth(month) + firstColumn;            this.mYear = calendar.get(Calendar.YEAR); // 获取当前年份            this.mMonth = calendar.get(Calendar.MONTH) + 1;// 获取当前月份            this.mDay = calendar.get(Calendar.DAY_OF_MONTH);// 获取当日期            this.mWay = calendar.get(Calendar.DAY_OF_WEEK);// 获取当前日期的星期            this.mHour = calendar.get(Calendar.HOUR_OF_DAY);//时            this.mMinute = calendar.get(Calendar.MINUTE);//分        }        @Override        public int getCount() {            return count;        }        @Override        public Object getItem(int position) {            return position;        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            View view = LayoutInflater.from(SignInActivity.this).inflate(R.layout.signin_gv_item, null);            TextView textView = (TextView) view.findViewById(R.id.siginin_gv_item_tv);            if (position < firstColumn) {                textView.setText("");                view.setTag(0);            } else {                textView.setText(String.valueOf(position - firstColumn + 1));                view.setTag(position - firstColumn + 1);//使用tag存储当前view是哪一天            }            if ((int) view.getTag() < mDay) {                textView.setTextColor(SignInActivity.this.getResources().getColor(R.color.lightgray));            }            if ((int) view.getTag() == mDay) {                textView.setBackgroundColor(SignInActivity.this.getResources().getColor(R.color.gray));                textView.setTextColor(SignInActivity.this.getResources().getColor(R.color.white));            }            if (null != signinInfoResponseBean) {                for (int i = 0; i < signinInfoResponseBean.getData().getDataArr().size(); i++) {                    int signdate = signinInfoResponseBean.getData().getDataArr().get(i);                    int date = (int) view.getTag();                    if (date == signdate) {                        textView.setBackgroundColor(SignInActivity.this.getResources().getColor(R.color.chartreuse));                        textView.setTextColor(SignInActivity.this.getResources().getColor(R.color.white));                    }                }            }            return view;        }        /**         * 获取列序号         *         * @param dayOfMonth 日期         * @return 列序号         */        private int getColumnIndex(int dayOfMonth) {            Calendar calendar = Calendar.getInstance();            calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);            if (dayOfWeek == Calendar.SUNDAY) {                dayOfWeek = 6;            } else {                dayOfWeek = dayOfWeek - 2;            }            return dayOfWeek;        }        /**         * 获取行序号         *         * @param dayOfMonth 日期         * @return 行序号         */        private int getRowIndex(int dayOfMonth) {            float weight = (dayOfMonth - getColumnIndex(dayOfMonth)) / (7 * 1f);            double rowIndexDouble = Math.abs(Math.ceil(weight));            return (int) rowIndexDouble;        }        /**         * @param month 月份         * @return 某月天数         */        private int getDayNumOfMonth(int month) {            switch (month) {                case 4:                case 6:                case 9:                case 11:                    return 30;                case 2:                    if (Calendar.getInstance().get(Calendar.YEAR) % 4 == 0) {                        return 29;                    }                    return 28;                default:                    return 31;            }        }    }}






0 0