Android 는 출석 체크 포인트 획득 기능 을 가 진 달력 을 실현 합 니 다.

Android 는 출석 버튼 을 누 르 면 바로 출석 하고 dialog 를 팝 업 하 며 먼저 효과 도 를 올 립 니 다.

demo 는 gridview 를 이용 하여 이 루어 졌 습 니 다.레이아웃 파일 을 첨부 합 니 다.

<?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="            !" 
  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> 
효과 그림: 

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("         "); 
 } 
 } 
그 계산 날짜 의 주요 코드 는 어댑터 에 있 습 니 다.

 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 + "
" + 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; 
 } 
 
} 
포 인 트 는 당연히 백 스테이지 에 맡 겨 처리 하고 돌 아 왔 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기