溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android怎么實現(xiàn)帶簽到贏積分功能的日歷

發(fā)布時間:2021-04-17 11:20:15 來源:億速云 閱讀:167 作者:小新 欄目:移動開發(fā)

小編給大家分享一下Android怎么實現(xiàn)帶簽到贏積分功能的日歷,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

Android實現(xiàn)點擊簽到按鈕直接簽到,彈出dialog,先上效果圖

Android怎么實現(xiàn)帶簽到贏積分功能的日歷

demo是利用gridview實現(xiàn)的,現(xiàn)附上布局文件

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:orientation="vertical" 
 > 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:padding="2dp" 
 android:orientation="vertical" 
 android:background="@drawable/shape_btn_white" 
 > 
 <RelativeLayout 
 android:layout_width="match_parent" 
 android:layout_height="40dp" 
 > 
 <ImageView 
  android:id="@+id/iv_front" 
  android:layout_width="30dp" 
  android:layout_height="40dp" 
  android:padding="10dp" 
  android:layout_marginLeft="8dp" 
  android:scaleType="centerCrop" 
  android:layout_alignParentLeft="true" 
  android:layout_centerInParent="true" 
  android:src="@mipmap/icon_sign_front" 
  /> 
 <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" 
  /> 
 <ImageView 
  android:id="@+id/iv_next" 
  android:layout_width="30dp" 
  android:layout_height="40dp" 
  android:layout_marginRight="8dp" 
  android:padding="10dp" 
  android:scaleType="centerCrop" 
  android:layout_alignParentRight="true" 
  android:layout_centerInParent="true" 
  android:src="@mipmap/icon_sign_next" 
  /> 
 </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:background="#dbdbdb" 
 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" 
  /> 
 <LinearLayout 
  android:layout_width="match_parent" 
  android:layout_height="50dp" 
  android:gravity="center" 
  > 
  <TextView 
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content" 
  android:text="連續(xù)簽到會有更多積分哦 !" 
  android:textColor="#2a2a2a" 
  android:layout_marginRight="5dp" 
  android:textSize="14sp" 
  /> 
  <TextView 
  android:id="@+id/tv_sign_num" 
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content" 
  android:layout_marginRight="20dp" 
  android:visibility="gone" 
  android:text="3天" 
  /> 
  <TextView 
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content" 
  android:text="@string/jifen" 
  android:textColor="#2a2a2a" 
  android:visibility="gone" 
 
  android:layout_marginRight="5dp" 
  android:textSize="14sp" 
  /> 
  <TextView 
  android:id="@+id/tv_jifen_num" 
  android:visibility="gone" 
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content" 
  android:text="100" 
  /> 
 </LinearLayout> 
</LinearLayout> 
</LinearLayout>

效果圖: 

Android怎么實現(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<modle.getDatas().size();i++){ 
 if (modle.getDatas().get(i).getStatus()==1){ 
  b[i]=String.valueOf(1); 
 } 
 } 
 return b; 
} 
 @Override 
 public void onClick(View v) { 
 switch (v.getId()){ 
  case R.id.iv_front: 
  redMonth(); 
  tv_date.setText(year+"-"+month+"-"+systime.split("-")[2]); 
  changeOtherMoth(year, month); 
  break; 
  case R.id.iv_next: 
  addMonth(); 
  tv_date.setText(year+"-"+month+"-"+systime.split("-")[2]); 
  changeOtherMoth(year,month); 
  break; 
 } 
 } 
 public void addMonth(){ 
 month++; 
 if (month==13){ 
  month=1; 
  year++; 
 } 
 } 
 public void redMonth(){ 
 month--; 
 if (month==0){ 
  month=12; 
  year--; 
 } 
 } 
 public void changeOtherMoth(int year,int moth){ 
 if (CMethod.isNet(context)){ 
  JSONObject jsonObject= NetJsonModle.getJsonObject(context,"528"); 
  try { 
  jsonObject.put("reporterId",new LastLoginUtils(context).getReporterId()); 
  jsonObject.put("time", year + "-" + moth); 
  HttpUtils.PostDataToWeb(UrlAddressUrils.CODE_OTHER, AppConstants.SIGN_DATA_INFO, jsonObject, new HttpClientListener() { 
   @Override 
   public void onSuccess(String result) { 
   Gson gson = new Gson(); 
   SignDateModle m = gson.fromJson(result, SignDateModle.class); 
   for (int i = 0; i < b.length; i++) { 
    b[i] = "0"; 
   } 
   if (m != null) { 
    String dates = m.getDateTime(); 
    adapter = new MyCalendarAdapter(context, Integer.valueOf(dates.split("-")[0]), Integer.valueOf(dates.split("-")[1]), 17, getStrings(m)); 
    gridView.setAdapter(adapter); 
   } 
   } 
 
   @Override 
   public void onFailure(String result) { 
 
   } 
 
   @Override 
   public void onError() { 
 
   } 
  }); 
  } catch (JSONException e) { 
  e.printStackTrace(); 
  } 
 }else { 
  T.s("請檢查網(wǎng)絡(luò)是否連接"); 
 } 
 }

其計算日期的主要代碼在適配器中:

 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; // 用于標(biāo)記當(dāng)天 
 private String showYear = ""; // 用于在頭部顯示的年份 
 private String showMonth = ""; // 用于在頭部顯示的月份 
 private String animalsYear = ""; 
 private String leapMonth = ""; // 閏哪一個月 
 // 系統(tǒng)當(dāng)前時間 
 private String sysDate = ""; 
 private String sys_year = ""; 
 private String sys_month = ""; 
 private String sys_day = ""; 
 private boolean flag;// 標(biāo)記是不是本月 
 private String[] data; 
 private int a; 
 public MyCalendarAdapter() { 
  Date date = new Date(); 
  sysDate = sdf.format(date); // 當(dāng)期日期 
  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);// 得到當(dāng)前的年份 
  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) { 
  // 當(dāng)前月信息顯示 
  holder.tv_date.setTextColor(Color.parseColor("#2a2a2a"));// 當(dāng)月字體設(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è)置當(dāng)天的背景 
//  String dv="今日"; 
//  SpannableString sp = new SpannableString(d + "\n" + dv);//當(dāng)天字體加粗 
//  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 = ""; 
 
  // 得到當(dāng)前月的所有日程日期(這些日期需要標(biāo)記) 
  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 + ""; 
   // 對于當(dāng)前月才去標(biāo)記當(dāng)前日期 
   if (sys_year.equals(String.valueOf(year)) 
    && sys_month.equals(String.valueOf(month)) 
    && sys_day.equals(day)) { 
   // 標(biāo)記當(dāng)前日期 
   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; 
 } 
 
}

積分當(dāng)然是交給后臺處理返回了。

看完了這篇文章,相信你對“Android怎么實現(xiàn)帶簽到贏積分功能的日歷”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI