Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.thieumao.test;
- import android.graphics.Color;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.util.DisplayMetrics;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.FrameLayout;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Collections;
- import java.util.Comparator;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Random;
- public class MainActivity extends AppCompatActivity {
- class ScheduleTime {
- private double startTime;
- private double endTime;
- ScheduleTime(double startTime, double endTime) {
- this.startTime = startTime;
- this.endTime = endTime;
- }
- public double getStartTime() {
- return startTime;
- }
- public void setStartTime(double startTime) {
- this.startTime = startTime;
- }
- public double getEndTime() {
- return endTime;
- }
- public void setEndTime(double endTime) {
- this.endTime = endTime;
- }
- }
- class ScheduleKey {
- private double startRange;
- private double endRange;
- ScheduleKey(double startTime, double endTime) {
- this.startRange = startTime;
- this.endRange = endTime;
- }
- public double getStartRange() {
- return startRange;
- }
- public void setStartRange(double startRange) {
- this.startRange = startRange;
- }
- public double getEndRange() {
- return endRange;
- }
- public void setEndRange(double endRange) {
- this.endRange = endRange;
- }
- }
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- FrameLayout contentLayout = (FrameLayout) findViewById(R.id.content_layout);
- // stub
- List<ScheduleTime> schedules = Arrays.asList(
- new ScheduleTime(1, 2),
- new ScheduleTime(4, 5),
- new ScheduleTime(4.5, 5.5),
- new ScheduleTime(4.5, 5.5),
- new ScheduleTime(4.5, 5.5),
- new ScheduleTime(6, 23.5));
- Collections.sort(schedules, new Comparator<ScheduleTime>() {
- @Override
- public int compare(ScheduleTime schedule1, ScheduleTime schedule2) {
- double diff = schedule1.getStartTime() - schedule2.getStartTime();
- if (diff > 0) {
- return 1;
- } else if (diff < 0) {
- return -1;
- }
- return 0;
- }
- });
- for (ScheduleTime schedule : schedules) {
- ScheduleKey foundKey = null;
- for (ScheduleKey key : scheduleGroup.keySet()) {
- if (schedule.getStartTime() >= key.getStartRange() && schedule.getStartTime() < key.getEndRange()) {
- foundKey = key;
- break;
- }
- }
- if (foundKey != null) {
- foundKey.setStartRange(foundKey.getStartRange());
- foundKey.setEndRange(Math.max(schedule.getEndTime(), foundKey.getEndRange()));
- List<ScheduleTime> arr = scheduleGroup.get(foundKey);
- arr.add(schedule);
- } else {
- foundKey = new ScheduleKey(schedule.getStartTime(), schedule.getEndTime());
- List<ScheduleTime> arr = new ArrayList<>();
- arr.add(schedule);
- scheduleGroup.put(foundKey, arr);
- }
- }
- double paddingLeft = 200;// getResources().getDimensionPixelSize(R.dimen.content_layout_padding_left);
- DisplayMetrics metrics = new DisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(metrics);
- double width = metrics.widthPixels - paddingLeft;
- double height = 200;//getResources().getDimensionPixelSize(R.dimen.content_layout_height);
- for (List<MainActivity.ScheduleTime> arr : scheduleGroup.values()) {
- int w = (int)(width / arr.size());
- for (int i = 0; i < arr.size(); i++) {
- MainActivity.ScheduleTime schedule = arr.get(i);
- View v = new View(getApplicationContext());
- v.setBackgroundColor(getRandomColor());
- FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(w, (int)(height * (schedule.getEndTime() - schedule.getStartTime())));
- params.setMargins((int)(paddingLeft + i * w), (int)(schedule.getStartTime() * height), 0, 0);
- contentLayout.addView(v, params);
- }
- }
- ViewGroup.LayoutParams params = contentLayout.getLayoutParams();
- params.height = 24 * (int)height;
- contentLayout.setLayoutParams(params);
- }
- private Random random = new Random();
- private int getRandomColor() {
- int r = random.nextInt(255);
- int g = random.nextInt(255);
- int b = random.nextInt(255);
- return Color.rgb(r, g, b);
- }
- private Map<ScheduleKey, List<ScheduleTime>> scheduleGroup = new HashMap<>();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement