Hola de nuevo. Te envio la clase Calendarview que es la de vista del calendario. Dentro esta la Clase GridCellAdapter donde esta el adaptador. Te envio la app del calendario. No me deja pegar todo lo que yo he desarrollado. Si quieres te lo envio por otro conducto.
Gracias de antemano por tu dedicacion. Un saludo.
package com.example4.mcalendar;
import java.nio.channels.GatheringByteChannel;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.ParseException;
import android.os.Bundle;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
@TargetApi(3)
public class Calendarview extends Activity implements OnClickListener {
private static final String tag = "Calendarview";
private TextView currentMonth;
private Button selectedDayMonthYearButton, permisos, cambios,listacambios, listapermisos;
private ImageView prevMonth;
private ImageView nextMonth;
private GridView calendarView;
private GridCellAdapter adapter;
private Calendar calendar;
@SuppressLint("NewApi")
private int month, year;
@SuppressWarnings("unused")
@SuppressLint({ "NewApi", "NewApi", "NewApi", "NewApi" })
private final DateFormat dateFormatter = new DateFormat();
private static final String dateTemplate = "MMMM yyyy";
Animation animacion, animaalejar, animacercar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calendarview);
calendar = Calendar.getInstance(Locale.getDefault());
month = calendar.get(Calendar.MONTH)+1;
year = calendar.get(Calendar.YEAR);
Log.d(tag, "Calendar Instance: =" + "month" + " " +"year: " + year );
selectedDayMonthYearButton = (Button) this.findViewById(R.id.selectedDayMonthYear);
// animacion del texto
animacion = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.parpadear);
selectedDayMonthYearButton.startAnimation(animacion);
animaalejar = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alejar);
animacercar = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.acercar);
permisos= (Button)findViewById(R.id.settings);
permisos.setOnClickListener(this);
cambios = (Button)findViewById(R.id.addEvent);
cambios.setOnClickListener(this);
selectedDayMonthYearButton.setOnClickListener(this);
listacambios =(Button)findViewById(R.id.listaparacambios);
listacambios.setOnClickListener(this);
listapermisos =(Button)findViewById(R.id.listaparapermisos);
listapermisos.setOnClickListener(this);
prevMonth = (ImageView)this.findViewById(R.id.prevmonth);
prevMonth.setOnClickListener(this);
currentMonth = (TextView)this.findViewById(R.id.currentmonth);
currentMonth.setText(DateFormat.format(dateTemplate, calendar.getTime()));
nextMonth = (ImageView)this.findViewById(R.id.nextmonth);
nextMonth.setOnClickListener(this);
calendarView = (GridView)this.findViewById(R.id.calendar);
adapter = new GridCellAdapter(getApplicationContext(), R.id.calendar_day_gridcell,month,year);
adapter.notifyDataSetChanged();
calendarView.setAdapter(adapter);
}
private void setGridCellAdapterToDate (int month, int year){
adapter =new GridCellAdapter(getApplicationContext(),R.id.calendar_day_gridcell, month, year);
calendar.set(year, month- 1, calendar.get(Calendar.DAY_OF_MONTH));
currentMonth.setText(DateFormat.format(dateTemplate, calendar.getTime()));
adapter.notifyDataSetChanged();
calendarView.setAdapter(adapter);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String nombre = selectedDayMonthYearButton.getText().toString();
if(v== prevMonth){
if(month <= 1){
month = 12;
year --;
}else {
month--;
}
Log.d(tag, "Setting Prev Month in GridCellAdapter: " + "Month:" + month + "year: " +year);
setGridCellAdapterToDate(month, year);
}
if ( v==nextMonth){
if (month> 11){
month = 1;
year++;
}else{
month++;
}
Log.d(tag, "Setting Next Month in GridCellAdapter: " + "Month" + month + "year: " + year);
setGridCellAdapterToDate(month, year);
}
if(v==cambios){
Intent i = new Intent(this, CambioServicio.class);
Bundle cambio = new Bundle();
cambio.putString("NOMBRE", nombre);
i.putExtras(cambio);
startActivity(i);
}
if(v==permisos){
Intent i = new Intent(this, DiaPermiso.class);
Bundle cambio = new Bundle();
cambio.putString("NOMBRE", nombre);
i.putExtras(cambio);
startActivity(i);
}
if(v==listacambios){
Intent i = new Intent(this, ListaCambios.class);
startActivity(i);
listacambios.startAnimation(animaalejar);
listacambios.startAnimation(animacercar);
}
if(v==listapermisos){
Intent i = new Intent(this,ListaPermisos.class);
startActivity(i);
listapermisos.startAnimation(animaalejar);
listapermisos.startAnimation(animacercar);
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
Log.d(tag, "Destroying View...");
super.onDestroy();
}
public class GridCellAdapter extends BaseAdapter implements OnClickListener{
private static final String tag = "GridCellAdapter";
private final Context context;
private final List<String> list;
private static final int DAY_OFFSET = 1;
private final String[]weekdays = new String[] {"sun","Mon", "Tue", "Wed", "Thu","Fri","Sat" };
//private final String[]months = {"January","February","March","April","May","June","July",
//"August","Septembre","October","November","December"};
private final String[]months= {"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto",
"Septiembre","Octubre","Noviembre","Dicienbre"};
private final int[] daysOfMonth = {31,28,31,30,31,30,31,31,30,31,30,31};
private int daysInMonth;
private int currentDayOfMonth;
private int currentWeekDay;
private Button gridcell;
private TextView num_events_per_day;
private final HashMap<String, Integer> eventsPerMonthMap;
private final SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy");
public GridCellAdapter(Context context,int textViewResourceId,int month, int year){
super();
this.context = context;
this.list = new ArrayList<String>();
Log.d(tag, "==< Passed in Date FOR Month: " +month + " " + "year" + year);
Calendar calendar = Calendar.getInstance();
setCurrentDayOfMonth(calendar.get(Calendar.DAY_OF_MONTH));
setCurrentWeekDay(calendar.get(Calendar.DAY_OF_WEEK));
Log.d(tag, "New Calendar: =" + calendar.getTime().toString());
Log.d(tag, "CurrentDayOfWeek : " + getCurrentWeekDay());
Log.d(tag, "CurrentDayOfMonth :" + getCurrentDayOfMonth());
printMonth(month, year);
eventsPerMonthMap =findNumberOfEventsPerMonth(year,month);
}
private String getMonthAsString(int i){
return months[i];
}
private String getWeekDayAsString( int i){
return weekdays[i];
}
private int getNumberOfDaysOfMonth(int i){
return daysOfMonth[i];
}
public int getCount() {
return list.size();
}
public String getItem(int position) {
return list.get(position);
}
private void printMonth(int mm,int yy){
Log.d(tag, "==> printMonth: mm: " + mm + " " + "yy" + yy);
int trailingSpaces = 0;
int daysInPrevMonth = 0;
int prevMonth = 0;
int prevYear = 0;
int nextMonth = 0;
int nextYear = 0;
int currentMonth = mm-1;
String currentMonthName = getMonthAsString(currentMonth);
daysInMonth = getNumberOfDaysOfMonth(currentMonth);
Log.d(tag, "Current Month: " + " " + currentMonthName + "having" + daysInMonth + "days");
//modificado 1 por 0
GregorianCalendar cal = new GregorianCalendar(yy, currentMonth, 0);
Log.d(tag, "Gregorian Calendar:= " + cal.getTime().toString());
if (currentMonth ==11){
prevMonth = currentMonth - 1;
daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth);
nextMonth = 0;
prevYear = yy;
nextYear = yy +1;
Log.d(tag, "*->PrevYear: " + prevYear + "PrevMonth:" + prevMonth +
"nextmonth: " + nextMonth + "NextYear: "+ nextYear);
} else if (currentMonth ==0){
prevMonth = 11;
prevYear = yy-1;
nextYear = yy;
daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth);
nextMonth = 1;
Log.d(tag, "**-->PrevYear: " + prevYear + "PrevMonth: " + prevMonth +
"nextMonth: " + nextMonth+ "NextYear: " + nextYear);
}else{
prevMonth = currentMonth -1;
nextMonth = currentMonth +1;
nextYear =yy;
prevYear =yy;
daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth);
Log.d(tag, "***--->PrevYear:" + prevYear+ "PrevMonth: " +prevMonth+
"NextMont: " +nextMonth + "NextYear: " +nextYear);
}
int currentWeekDay = cal.get(Calendar.DAY_OF_WEEK)-1;
trailingSpaces = currentWeekDay;
Log.d(tag, "Week Day: " + currentWeekDay + "is"+getWeekDayAsString(currentWeekDay));
Log.d(tag, "No. Trailing space to Add:" + trailingSpaces);
Log.d(tag, "No. of Days in Previous Month:" +daysInPrevMonth);
if (cal.isLeapYear(cal.get(Calendar.YEAR)))
if (mm==2)
++daysInMonth;
else if (mm==3)
++daysInPrevMonth;
for (int i =0; i<trailingSpaces;i++){
Log.d(tag, "PREV MONTH:=" + prevMonth+ "=> "+ getMonthAsString(prevMonth)+ " "+
String.valueOf((daysInPrevMonth- trailingSpaces+ DAY_OFFSET)+i));
list.add(String.valueOf((daysInPrevMonth- trailingSpaces + DAY_OFFSET)+i)+ "-GREY"+
"-" + getMonthAsString(prevMonth)+ "-" + prevYear);
}
for (int i = 1; i<=daysInMonth; i++){
Log.d(currentMonthName, String.valueOf(i)+ " " + getMonthAsString(currentMonth)+
" "+ yy);
if (i== getCurrentDayOfMonth()){
list.add(String.valueOf(i) + "-BLUE"+ "-"+ getMonthAsString(currentMonth)+ "-" +yy);
}else{
list.add(String.valueOf(i)+ "-WHITE"+ "-"+ getMonthAsString(currentMonth)+ "-"+ yy);
}
}
for (int i=0; i<list.size()% 7;i++){
Log.d(tag, "NEXT MONTH:=" + getMonthAsString(nextMonth));
list.add(String.valueOf(i+ 1)+ "-GREY"+ "-" + getMonthAsString(nextMonth)+
"-"+ nextYear );
}
}
private HashMap<String, Integer> findNumberOfEventsPerMonth (int year,int month){
HashMap<String, Integer> map = new HashMap<String, Integer>();
return map;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row = convertView;
if (row ==null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.screen_gricell, parent, false);
}
gridcell = (Button)row.findViewById(R.id.calendar_day_gridcell);
gridcell.setOnClickListener(this);
Log.d(tag, "Current Day"+ getCurrentDayOfMonth());
String[]day_color = list.get(position).split("-");
String theday = day_color [0];
String themonth = day_color[2];
String theyear = day_color[3];
if( !eventsPerMonthMap.isEmpty() && (eventsPerMonthMap != null)){
if (eventsPerMonthMap.containsKey(theyear)){
num_events_per_day = (TextView)row.findViewById(R.id.num_events_per_day);
Integer numEvents = (Integer)eventsPerMonthMap.get(theday);
num_events_per_day.setText(numEvents.toString());
}
}
gridcell.setText(theday);
gridcell.setTag(theday+ "-"+ themonth+ "-" + theyear);
Log.d(tag, "Setting GridCell" + theday+ "-"+ themonth+ "-" +theyear);
if (day_color[1].equals("GREY")){
gridcell.setTextColor(getResources().getColor(R.color.lightgray));
}
if (day_color[1].equals("WHITE")){
gridcell.setTextColor(getResources().getColor(R.color.lightgray02));
}
if (day_color[1].equals("BLUE")){
gridcell.setTextColor(getResources().getColor(R.color.orrange));
//gridcell.setBackgroundColor(getResources().getColor(R.color.blue));
}
return row;
}
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
String date_month_year= (String)view.getTag();
selectedDayMonthYearButton.setText(date_month_year);
Log.e("Selected date", date_month_year);
try{
Date parsedDate = dateFormatter.parse(date_month_year);
Log.d(tag, "Parsed Date: " + parsedDate.toString());
}catch (ParseException e){
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public int getCurrentDayOfMonth(){
return currentDayOfMonth;
}
private void setCurrentDayOfMonth(int currentDayOfMonth){
this.currentDayOfMonth = currentDayOfMonth;
}
public void setCurrentWeekDay (int currentWeekDay){
this.currentWeekDay = currentWeekDay;
}
public int getCurrentWeekDay(){
return currentWeekDay;
}
}
}