资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

Android怎么实现带签到赢积分功能的日历

小编给大家分享一下Android怎么实现带签到赢积分功能的日历,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

创新互联成立与2013年,先为江苏等服务建站,江苏等地企业,进行企业商务咨询服务。为江苏企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

Android实现点击签到按钮直接签到,弹出dialog,先上效果图

Android怎么实现带签到赢积分功能的日历

demo是利用gridview实现的,现附上布局文件

 
 
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
   
   
   
   
  
 

效果图: 

Android怎么实现带签到赢积分功能的日历

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; // 某月的天数 
 private int dayOfWeek = 0; // 具体某一天是星期几 
 private int lastDaysOfMonth = 0; // 上一个月的总天数 
 private Context context; 
 private String[] dayNumber = new String[42]; // 一个gridview中的日期存入此数组中 
 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 = ""; // 闰哪一个月 
 // 系统当前时间 
 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"));// 当月字体设黑 
  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) { 
  // 设置当天的背景 
//  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; 
 } 
 // 得到某年的某月的天数且这月的第一天是星期几 
 public void getCalendar(int year, int month) { 
  isLeapyear = sc.isLeapYear(year); // 是否为闰年 
  daysOfMonth = sc.getDaysOfMonth(isLeapyear, month); // 某月的总天数 
  dayOfWeek = sc.getWeekdayOfMonth(year, month); // 某月第一天为星期几 
  lastDaysOfMonth = sc.getDaysOfMonth(isLeapyear, month - 1); // 上一个月的总天数 
  getweek(year, month); 
 } 
 // 将一个月中的每一天的值添加入数组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; // 某月的天数 
 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; 
 } 
 
 // 得到某月有多少天数 
 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怎么实现带签到赢积分功能的日历”有了一定的了解,如果想了解更多相关知识,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


文章题目:Android怎么实现带签到赢积分功能的日历
分享路径:http://www.cdkjz.cn/article/gcepse.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220