Advertisement
thieumao

Schedule - Draw Android

Nov 9th, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.31 KB | None | 0 0
  1. package com.thieumao.test;
  2.  
  3. import android.graphics.Color;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.os.Bundle;
  6. import android.util.DisplayMetrics;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import android.widget.FrameLayout;
  10.  
  11. import java.util.ArrayList;
  12. import java.util.Arrays;
  13. import java.util.Collections;
  14. import java.util.Comparator;
  15. import java.util.HashMap;
  16. import java.util.List;
  17. import java.util.Map;
  18. import java.util.Random;
  19.  
  20. public class MainActivity extends AppCompatActivity {
  21.  
  22.     class ScheduleTime {
  23.         private double startTime;
  24.         private double endTime;
  25.         ScheduleTime(double startTime, double endTime) {
  26.             this.startTime = startTime;
  27.             this.endTime = endTime;
  28.         }
  29.  
  30.         public double getStartTime() {
  31.             return startTime;
  32.         }
  33.  
  34.         public void setStartTime(double startTime) {
  35.             this.startTime = startTime;
  36.         }
  37.  
  38.         public double getEndTime() {
  39.             return endTime;
  40.         }
  41.  
  42.         public void setEndTime(double endTime) {
  43.             this.endTime = endTime;
  44.         }
  45.     }
  46.  
  47.     class ScheduleKey {
  48.         private double startRange;
  49.         private double endRange;
  50.         ScheduleKey(double startTime, double endTime) {
  51.             this.startRange = startTime;
  52.             this.endRange = endTime;
  53.         }
  54.  
  55.         public double getStartRange() {
  56.             return startRange;
  57.         }
  58.  
  59.         public void setStartRange(double startRange) {
  60.             this.startRange = startRange;
  61.         }
  62.  
  63.         public double getEndRange() {
  64.             return endRange;
  65.         }
  66.  
  67.         public void setEndRange(double endRange) {
  68.             this.endRange = endRange;
  69.         }
  70.     }
  71.  
  72.     @Override
  73.     protected void onCreate(Bundle savedInstanceState) {
  74.         super.onCreate(savedInstanceState);
  75.         setContentView(R.layout.activity_main);
  76.  
  77.         FrameLayout contentLayout = (FrameLayout) findViewById(R.id.content_layout);
  78.  
  79.         // stub
  80.         List<ScheduleTime> schedules = Arrays.asList(
  81.                 new ScheduleTime(1, 2),
  82.                 new ScheduleTime(4, 5),
  83.                 new ScheduleTime(4.5, 5.5),
  84.                 new ScheduleTime(4.5, 5.5),
  85.                 new ScheduleTime(4.5, 5.5),
  86.                 new ScheduleTime(6, 23.5));
  87.  
  88.         Collections.sort(schedules, new Comparator<ScheduleTime>() {
  89.             @Override
  90.             public int compare(ScheduleTime schedule1, ScheduleTime schedule2) {
  91.                 double diff = schedule1.getStartTime() - schedule2.getStartTime();
  92.                 if (diff > 0) {
  93.                     return 1;
  94.                 } else if (diff < 0) {
  95.                     return -1;
  96.                 }
  97.                 return 0;
  98.             }
  99.         });
  100.  
  101.         for (ScheduleTime schedule : schedules) {
  102.             ScheduleKey foundKey = null;
  103.             for (ScheduleKey key : scheduleGroup.keySet()) {
  104.                 if (schedule.getStartTime() >= key.getStartRange() && schedule.getStartTime() < key.getEndRange()) {
  105.                     foundKey = key;
  106.                     break;
  107.                 }
  108.             }
  109.  
  110.             if (foundKey != null) {
  111.                 foundKey.setStartRange(foundKey.getStartRange());
  112.                 foundKey.setEndRange(Math.max(schedule.getEndTime(), foundKey.getEndRange()));
  113.                 List<ScheduleTime> arr = scheduleGroup.get(foundKey);
  114.                 arr.add(schedule);
  115.             } else {
  116.                 foundKey = new ScheduleKey(schedule.getStartTime(), schedule.getEndTime());
  117.                 List<ScheduleTime> arr = new ArrayList<>();
  118.                 arr.add(schedule);
  119.                 scheduleGroup.put(foundKey, arr);
  120.             }
  121.         }
  122.  
  123.         double paddingLeft = 200;// getResources().getDimensionPixelSize(R.dimen.content_layout_padding_left);
  124.         DisplayMetrics metrics = new DisplayMetrics();
  125.  
  126.         getWindowManager().getDefaultDisplay().getMetrics(metrics);
  127.         double width = metrics.widthPixels - paddingLeft;
  128.         double height = 200;//getResources().getDimensionPixelSize(R.dimen.content_layout_height);
  129.         for (List<MainActivity.ScheduleTime> arr : scheduleGroup.values()) {
  130.             int w = (int)(width / arr.size());
  131.             for (int i = 0; i < arr.size(); i++) {
  132.                 MainActivity.ScheduleTime schedule = arr.get(i);
  133.                 View v = new View(getApplicationContext());
  134.                 v.setBackgroundColor(getRandomColor());
  135.                 FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(w, (int)(height * (schedule.getEndTime() - schedule.getStartTime())));
  136.                 params.setMargins((int)(paddingLeft + i * w), (int)(schedule.getStartTime() * height), 0, 0);
  137.                 contentLayout.addView(v, params);
  138.             }
  139.         }
  140.  
  141.         ViewGroup.LayoutParams params = contentLayout.getLayoutParams();
  142.         params.height = 24 * (int)height;
  143.         contentLayout.setLayoutParams(params);
  144.     }
  145.  
  146.     private Random random = new Random();
  147.     private int getRandomColor() {
  148.         int r = random.nextInt(255);
  149.         int g = random.nextInt(255);
  150.         int b = random.nextInt(255);
  151.         return Color.rgb(r, g, b);
  152.     }
  153.  
  154.     private Map<ScheduleKey, List<ScheduleTime>> scheduleGroup = new HashMap<>();
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement