drcarter의 DevLog



hexagon이미지를 만드는 방법입니다.

방법은 간단히.. 이미지의 중심점을 잡고, 반지름을 구한 뒤 중심점에서 각 0도, 60도, 120도, 180도, 240도, 360도 위치의 점을 잇는 선을 그은 뒤 그에 해당하는 이미지만 뽑아내느 방법입니다.

이걸 활용하면 android에서 사용할 HexagonImageView도 만들어 볼 수 있겠죠.

코드는 아래와 같습니다.


private Bitmap getHexagonImage(Bitmap toTransform) {
    Bitmap output = Bitmap.createBitmap(toTransform.getWidth(),
            toTransform.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(output);

    int radius = 0;
    int width = toTransform.getWidth();
    int height = toTransform.getHeight();
    int centerX = width / 2;
    int centerY = height / 2;

    if (width >= height) {
        radius = height / 2;
    } else {
        radius = width / 2;
    }

    Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, toTransform.getWidth(),
            toTransform.getHeight());

    Path path = new Path();
    for (int i = 0; i < 6; i++) {

        int posX = (int) (centerX + radius * Math.cos(Math.toRadians(i * 60 - 30)));
        int posY = (int) (centerY + radius * Math.sin(Math.toRadians(i * 60 - 30)));
        if (i == 0) {
            path.moveTo(posX, posY);
        } else {
            path.lineTo(posX, posY);
        }
    }

    path.close();
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(Color.parseColor("#FFFFFF"));
    canvas.drawPath(path, paint);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(toTransform, rect, rect, paint);

    return output;
}