Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.graphics.Path;
- import android.util.AttributeSet;
- import android.view.View;
- public class HexagonView extends View {
- static final float SQRT3 = (float) Math.sqrt(3);
- static final int TILES_NEEDED = 4;
- float r = 100;
- Path hexagon;
- Paint[] paints;
- public HexagonView(Context context) {
- super(context);
- init();
- }
- public HexagonView(Context context, AttributeSet attrs) {
- super(context, attrs);
- init();
- }
- public HexagonView(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- init();
- }
- public void init() {
- hexagon = new Path();
- double step = (2 * Math.PI) / 6; // Tau / 6 = 60°
- double angle;
- for (int i = 0; i < 6; i++) {
- angle = step * i;
- if (hexagon.isEmpty()) {
- hexagon.moveTo((float) (r * Math.cos(angle)), (float) (r * Math.sin(angle)));
- } else {
- hexagon.lineTo((float) (r * Math.cos(angle)), (float) (r * Math.sin(angle)));
- }
- }
- paints = new Paint[TILES_NEEDED];
- for (int i = 0, s = paints.length; i < s; i++) {
- paints[i] = new Paint();
- paints[i].setAntiAlias(true);
- paints[i].setColor(getColor(i));
- }
- }
- public int getColor(int i) {
- switch (i) {
- case 0:
- return Color.BLUE;
- case 1:
- return Color.GREEN;
- case 2:
- return Color.RED;
- case 3:
- return Color.CYAN;
- }
- return Color.BLACK;
- }
- @Override
- protected void onDraw(Canvas canvas) {
- float xshift = 3 * r;
- float yshift = 2 * SQRT3 * r;
- for (int p = 0; p < TILES_NEEDED; p++) {
- float ry = -yshift * p / 4f;
- ry -= yshift;
- do {
- ry += yshift;
- float rx = -xshift * p / 2f;
- rx -= xshift;
- do {
- rx += xshift;
- canvas.save();
- canvas.translate(rx, ry);
- canvas.drawPath(hexagon, paints[p]);
- canvas.restore();
- } while (rx <= canvas.getWidth());
- } while (ry <= canvas.getHeight());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement