小編給大家分享一下Android怎么實現(xiàn)帶簽到贏積分功能的日歷,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
創(chuàng)新互聯(lián)建站服務(wù)項目包括麻栗坡網(wǎng)站建設(shè)、麻栗坡網(wǎng)站制作、麻栗坡網(wǎng)頁制作以及麻栗坡網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,麻栗坡網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到麻栗坡省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!Android實現(xiàn)點擊簽到按鈕直接簽到,彈出dialog,先上效果圖
demo是利用gridview實現(xiàn)的,現(xiàn)附上布局文件
效果圖:
dialog中的主要代碼:
public class SignDataDialog extends Dialog implements View.OnClickListener{ private GridView gridView; private ImageView iv_front,iv_next; private TextView tv_date,tv_sign_days,tv_jifen; private MyCalendarAdapter adapter; private SpecialCalendar sp; private Context context; private SignDateModle modle; private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d"); private String systime; private int year,month; String[] b=new String[]{ "0","0","0","0","0","0","0", "0","0","0","0","0","0","0", "0","0","0","0","0","0","0", "0","0","0","0","0","0","0", "0","0","0","0","0","0","0", "0","0","0","0","0","0","0" }; public SignDataDialog(Context context,SignDateModle modle) { super(context); this.context=context; this.modle=modle; setContentView(R.layout.dialog_sign_data); Window window = getWindow(); WindowManager.LayoutParams params = window.getAttributes(); params.gravity = Gravity.CENTER; window.setBackgroundDrawableResource(android.R.color.transparent); window.setAttributes(params); setCanceledOnTouchOutside(true); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sp=new SpecialCalendar(); Date date = new Date(); systime = sdf.format(date); year=Integer.valueOf(systime.split("-")[0]); month=Integer.valueOf(systime.split("-")[1]); iv_front= (ImageView) findViewById(R.id.iv_front); iv_next= (ImageView) findViewById(R.id.iv_next); gridView= (GridView) findViewById(R.id.gv_sign_date); tv_date= (TextView) findViewById(R.id.tv_date); tv_sign_days= (TextView) findViewById(R.id.tv_sign_num); tv_jifen= (TextView) findViewById(R.id.tv_jifen_num); tv_date.setText(systime); iv_front.setOnClickListener(this); iv_next.setOnClickListener(this); if (modle!=null) { String dates=modle.getDateTime(); adapter = new MyCalendarAdapter(context, Integer.valueOf(dates.split("-")[0]), Integer.valueOf(dates.split("-")[1]), 17, getStrings(modle)); gridView.setAdapter(adapter); } } public String[] getStrings(SignDateModle modle){ int year=Integer.valueOf(modle.getDateTime().split("-")[0]); int moth=Integer.valueOf(modle.getDateTime().split("-")[1]); int start=sp.getWeekdayOfMonth(year,moth); for (int i=0;i其計算日期的主要代碼在適配器中:
class MyCalendarAdapter extends BaseAdapter{ private boolean isLeapyear = false; // 是否為閏年 private int daysOfMonth = 0; // 某月的天數(shù) private int dayOfWeek = 0; // 具體某一天是星期幾 private int lastDaysOfMonth = 0; // 上一個月的總天數(shù) private Context context; private String[] dayNumber = new String[42]; // 一個gridview中的日期存入此數(shù)組中 private SpecialCalendar sc = null; private String currentYear = ""; private String currentMonth = ""; private int currentFlag = -1; // 用于標記當天 private String showYear = ""; // 用于在頭部顯示的年份 private String showMonth = ""; // 用于在頭部顯示的月份 private String animalsYear = ""; private String leapMonth = ""; // 閏哪一個月 // 系統(tǒng)當前時間 private String sysDate = ""; private String sys_year = ""; private String sys_month = ""; private String sys_day = ""; private boolean flag;// 標記是不是本月 private String[] data; private int a; public MyCalendarAdapter() { Date date = new Date(); sysDate = sdf.format(date); // 當期日期 sys_year = sysDate.split("-")[0]; sys_month = sysDate.split("-")[1]; sys_day = sysDate.split("-")[2]; } public MyCalendarAdapter(Context context,int year_c,int month_c, int day_c, String[] a) { // TODO Auto-generated constructor stub this(); this.context = context; sc = new SpecialCalendar(); currentYear = String.valueOf(year_c);// 得到當前的年份 currentMonth = String.valueOf(month_c); getCalendar(Integer.parseInt(currentYear), Integer.parseInt(currentMonth)); data = a; } @Override public int getCount() { return dayNumber.length; } @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) { ViewHolder holder; if (convertView==null){ holder=new ViewHolder(); convertView= LayoutInflater.from(context).inflate(R.layout.item_sign_data,null); holder.iv_bg= (ImageView) convertView.findViewById(R.id.iv_bg); holder.tv_date= (TextView) convertView.findViewById(R.id.tv_date); convertView.setTag(holder); }else { holder= (ViewHolder) convertView.getTag(); } String d = dayNumber[position]; holder.tv_date.setText(d); holder.tv_date.setTextColor(Color.GRAY); if (position < daysOfMonth + dayOfWeek && position >= dayOfWeek) { // 當前月信息顯示 holder.tv_date.setTextColor(Color.parseColor("#2a2a2a"));// 當月字體設(shè)黑 flag = true; a++; } else { flag = false; } if (flag) { if (a <= data.length) { String att = data[a - 1]; if (att.equals("1")) {//簽到 holder.tv_date.setTextColor(Color.parseColor("#2a2a2a")); holder.iv_bg.setVisibility(View.VISIBLE); } } } if (currentFlag == position) { // 設(shè)置當天的背景 // String dv="今日"; // SpannableString sp = new SpannableString(d + "\n" + dv);//當天字體加粗 // sp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, // d.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // sp.setSpan(new RelativeSizeSpan(1.2f), 0, d.length(), // Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // sp.setSpan(new RelativeSizeSpan(0.75f), d.length() , // dayNumber[position].length()+ 3, // Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // holder.tv_date.setText(sp); // holder.iv_bg.setVisibility(View.VISIBLE); holder.iv_bg.setImageDrawable(context.getResources().getDrawable(R.mipmap.icon_sign_bg_today)); } return convertView; } class ViewHolder{ private ImageView iv_bg; private TextView tv_date; } // 得到某年的某月的天數(shù)且這月的第一天是星期幾 public void getCalendar(int year, int month) { isLeapyear = sc.isLeapYear(year); // 是否為閏年 daysOfMonth = sc.getDaysOfMonth(isLeapyear, month); // 某月的總天數(shù) dayOfWeek = sc.getWeekdayOfMonth(year, month); // 某月第一天為星期幾 lastDaysOfMonth = sc.getDaysOfMonth(isLeapyear, month - 1); // 上一個月的總天數(shù) getweek(year, month); } // 將一個月中的每一天的值添加入數(shù)組dayNuber中 private void getweek(int year, int month) { int j = 1; int flag = 0; String lunarDay = ""; // 得到當前月的所有日程日期(這些日期需要標記) for (int i = 0; i < dayNumber.length; i++) { if (i < dayOfWeek) { // 前一個月 int temp = lastDaysOfMonth - dayOfWeek + 1; dayNumber[i] = (temp + i) + ""; } else if (i < daysOfMonth + dayOfWeek) { // 本月 String day = String.valueOf(i - dayOfWeek + 1); // 得到的日期 dayNumber[i] = i - dayOfWeek + 1 + ""; // 對于當前月才去標記當前日期 if (sys_year.equals(String.valueOf(year)) && sys_month.equals(String.valueOf(month)) && sys_day.equals(day)) { // 標記當前日期 currentFlag = i; } setShowYear(String.valueOf(year)); setShowMonth(String.valueOf(month)); } else { // 下一個月 dayNumber[i] = j + ""; j++; } } String abc = ""; for (int i = 0; i < dayNumber.length; i++) { abc = abc + dayNumber[i] + ":"; } } public String getShowYear() { return showYear; } public void setShowYear(String showYear) { this.showYear = showYear; } public String getShowMonth() { return showMonth; } public void setShowMonth(String showMonth) { this.showMonth = showMonth; } public String getAnimalsYear() { return animalsYear; } public void setAnimalsYear(String animalsYear) { this.animalsYear = animalsYear; } public String getLeapMonth() { return leapMonth; } public void setLeapMonth(String leapMonth) { this.leapMonth = leapMonth; } }public class SpecialCalendar { private int daysOfMonth = 0; // 某月的天數(shù) private int dayOfWeek = 0; // 具體某一天是星期幾 // 判斷是否為閏年 public boolean isLeapYear(int year) { if (year % 100 == 0 && year % 400 == 0) { return true; } else if (year % 100 != 0 && year % 4 == 0) { return true; } return false; } // 得到某月有多少天數(shù) public int getDaysOfMonth(boolean isLeapyear, int month) { switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: daysOfMonth = 31; break; case 4: case 6: case 9: case 11: daysOfMonth = 30; break; case 2: if (isLeapyear) { daysOfMonth = 29; } else { daysOfMonth = 28; } } return daysOfMonth; } // 指定某年中的某月的第一天是星期幾 public int getWeekdayOfMonth(int year, int month) { Calendar cal = Calendar.getInstance(); cal.set(year, month - 1, 1); dayOfWeek = cal.get(Calendar.DAY_OF_WEEK) - 1; return dayOfWeek; } }積分當然是交給后臺處理返回了。
看完了這篇文章,相信你對“Android怎么實現(xiàn)帶簽到贏積分功能的日歷”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
當前名稱:Android怎么實現(xiàn)帶簽到贏積分功能的日歷-創(chuàng)新互聯(lián)
分享路徑:http://weahome.cn/article/dcsiij.html