Advertisement
Tatarize

HexagonView

Jan 10th, 2016
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.54 KB | None | 0 0
  1. import android.content.Context;
  2. import android.graphics.Canvas;
  3. import android.graphics.Color;
  4. import android.graphics.Paint;
  5. import android.graphics.Path;
  6. import android.util.AttributeSet;
  7. import android.view.View;
  8.  
  9.  
  10. public class HexagonView extends View {
  11.     static final float SQRT3 = (float) Math.sqrt(3);
  12.     static final int TILES_NEEDED = 4;
  13.     float r = 100;
  14.  
  15.     Path hexagon;
  16.     Paint[] paints;
  17.  
  18.     public HexagonView(Context context) {
  19.         super(context);
  20.         init();
  21.     }
  22.  
  23.     public HexagonView(Context context, AttributeSet attrs) {
  24.         super(context, attrs);
  25.         init();
  26.     }
  27.  
  28.     public HexagonView(Context context, AttributeSet attrs, int defStyleAttr) {
  29.         super(context, attrs, defStyleAttr);
  30.         init();
  31.     }
  32.  
  33.     public void init() {
  34.         hexagon = new Path();
  35.         double step = (2 * Math.PI) / 6; // Tau / 6 = 60°
  36.         double angle;
  37.         for (int i = 0; i < 6; i++) {
  38.             angle = step * i;
  39.             if (hexagon.isEmpty()) {
  40.                 hexagon.moveTo((float) (r * Math.cos(angle)), (float) (r * Math.sin(angle)));
  41.             } else {
  42.                 hexagon.lineTo((float) (r * Math.cos(angle)), (float) (r * Math.sin(angle)));
  43.             }
  44.         }
  45.         paints = new Paint[TILES_NEEDED];
  46.         for (int i = 0, s = paints.length; i < s; i++) {
  47.             paints[i] = new Paint();
  48.             paints[i].setAntiAlias(true);
  49.             paints[i].setColor(getColor(i));
  50.         }
  51.     }
  52.  
  53.     public int getColor(int i) {
  54.         switch (i) {
  55.             case 0:
  56.                 return Color.BLUE;
  57.             case 1:
  58.                 return Color.GREEN;
  59.             case 2:
  60.                 return Color.RED;
  61.             case 3:
  62.                 return Color.CYAN;
  63.         }
  64.         return Color.BLACK;
  65.     }
  66.  
  67.     @Override
  68.     protected void onDraw(Canvas canvas) {
  69.         float xshift = 3 * r;
  70.         float yshift = 2 * SQRT3 * r;
  71.         for (int p = 0; p < TILES_NEEDED; p++) {
  72.             float ry = -yshift * p / 4f;
  73.             ry -= yshift;
  74.             do {
  75.                 ry += yshift;
  76.                 float rx = -xshift * p / 2f;
  77.                 rx -= xshift;
  78.                 do {
  79.                     rx += xshift;
  80.                     canvas.save();
  81.                     canvas.translate(rx, ry);
  82.                     canvas.drawPath(hexagon, paints[p]);
  83.                     canvas.restore();
  84.  
  85.                 } while (rx <= canvas.getWidth());
  86.             } while (ry <= canvas.getHeight());
  87.         }
  88.     }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement