Android Kalendertermine richtig positionieren in der Tagesansicht

ubik

Mitglied
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.

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?​
 

Anhänge

  • Screenshot_20170628-115330.png
    Screenshot_20170628-115330.png
    87,1 KB · Aufrufe: 33
  • termine.png
    termine.png
    10,9 KB · Aufrufe: 22

Ähnliche Java Themen

Neue Themen


Oben