Hallo,
ich habe eine Tagesansicht für Kalender programmiert.
Könntet ihr mir helfen:
Wenn mehrere Termine gleichzeitig dargestellt werden sollen, sollen sie nebeneinander sein, möglichst so, dass Platz gespart wird.
Meine Ansätze bisher:
Hier werden alle Termine geladen, danach nach dem längsten Termin sortiert. Schließlich werden mit addMultiplyDates() die Termine in ein Array geladen und die Position errechnet.
Hier ist die Funktion addMultiplyDates:
setPixelW(max) setzt dann die Spaltenposition des Termins.
Nun habe ich aber folgendes Problem:
Wie im Bild zu sehen, ist der Termin "Llll" falsch dargestellt.
Die Sache ist die, dass "Llll" falsch berechnet wird. Zur Stunde 13:00 gibt es nämlich nur drei Termine (Gut, Llll und Low). Allerdings müssten es vier sein, sonst passt es nicht.
Was mache ich falsch?
ich habe eine Tagesansicht für Kalender programmiert.
Könntet ihr mir helfen:
Wenn mehrere Termine gleichzeitig dargestellt werden sollen, sollen sie nebeneinander sein, möglichst so, dass Platz gespart wird.
Meine Ansätze bisher:
Hier werden alle Termine geladen, danach nach dem längsten Termin sortiert. Schließlich werden mit addMultiplyDates() die Termine in ein Array geladen und die Position errechnet.
Code:
alldateshourly_init = events.getAllEventsByDay(c1_init, c2_init);
Collections.sort(alldateshourly_init, new Comparator<ReadEvent>() {
@Override public int compare(ReadEvent p1, ReadEvent p2) {
return (int) ((p2.getDtend() - p2.getDtstart()) - (p1.getDtend() - p1.getDtstart()));
}
});
for (ReadEvent readevent : alldateshourly_init) {
addMultiplyDates(readevent.getEventid(), readevent.getDtstart(), readevent.getDtend());
}
Hier ist die Funktion addMultiplyDates:
Code:
private void addMultiplyDates(int eventid, long start, long end) {
Calendar mCalendar = new GregorianCalendar();
TimeZone mTimeZone = mCalendar.getTimeZone();
int mGMTOffset = mTimeZone.getRawOffset();
long offset = TimeZone.getDefault().getOffset(System.currentTimeMillis());
start = start - offset;
end = end - offset;
Calendar c = Calendar.getInstance();
c.setTimeInMillis(start);
int starthour = c.get(Calendar.HOUR_OF_DAY);
Calendar c2 = Calendar.getInstance();
c2.setTimeInMillis(end);
int endhour = c2.get(Calendar.HOUR_OF_DAY);
int endminute = c2.get(Calendar.MINUTE);
starthour = (int) (starthour - firsthour);
endhour = (int) (endhour - firsthour);
int checknextday = (int)lasthour - (int)firsthour +1;
if(endminute == 0) {
endhour = endhour - 1;
}
if(endhour > (int)lasthour - (int)firsthour) {
endhour = (int)lasthour - (int)firsthour;
}
System.out.println("Fuege " + eventid + " hinzu");
if(starthour >= 0 && endhour <= (int)lasthour - (int)firsthour) {
int max = 0;
for(int i = starthour; i <= endhour; i++) {
multidates.get(i).add(eventid);
if(multidates.get(i).size() - 1 > max) { max = multidates.get(i).size() - 1; }
}
getEventById(eventid).setPixelW(max);
System.out.println("MAXIMUM: " + max + " " + getEventById(eventid).getEventname());
}
}
setPixelW(max) setzt dann die Spaltenposition des Termins.
Nun habe ich aber folgendes Problem:
Wie im Bild zu sehen, ist der Termin "Llll" falsch dargestellt.
Die Sache ist die, dass "Llll" falsch berechnet wird. Zur Stunde 13:00 gibt es nämlich nur drei Termine (Gut, Llll und Low). Allerdings müssten es vier sein, sonst passt es nicht.
Was mache ich falsch?