自定义签到功能
来源:互联网 发布: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; } } }}
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
- 自定义签到功能
- 自定义Calendar实现签到功能
- 自定义日历 实现签到功能
- Android 自定义日历-实现签到订约功能
- 签到功能
- 签到功能
- 签到功能之三部曲
- 连续签到的功能
- java签到功能
- 签到功能代码
- php实现签到功能
- php实现签到功能
- php实现签到功能
- php实现签到功能
- 每日签到的功能
- Android_自定义签到View
- 自定义的签到View
- Facebook数周内推地理位置签到功能
- 由Insertion Sort中exch() 方法 带来的启发
- 控制linux动态链接库导出函数
- 操作系统精髓与设计原理-计算机系统概述
- swift 练习小demo 自定义UITabBarController navBar VC 简单框架
- transform兼容ie8
- 自定义签到功能
- 基础算法思想_枚举(穷举)算法——填数游戏
- 为了提高工作效率学习一下win+r 命令
- lnmp一键安装linux
- 二维码(OC 后面会推出Swift)
- 小公司如何搞定招聘?
- Brackets 是一个免费、开源且跨平台的 HTML/CSS/JavaScript 前端 WEB 集成开发环境 (IDE工具)
- 根据进程名杀死进程
- tinycore5.3配置总结