Zoomlayout: ZoomLayout์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ๋ณด๊ธฐ๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•

์— ๋งŒ๋“  2020๋…„ 09์›” 28์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: natario1/ZoomLayout

๋‚ด๊ฐ€ ์–ด๋–ป๊ฒŒ ํ• ?

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•๋Œ€/์ถ•์†Œํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ๋ณด๊ธฐ๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•

package com.example.mindmapping;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.otaliastudios.zoom.ZoomLayout;

public class MainActivity extends AppCompatActivity {

    <strong i="7">@Override</strong>
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        MindMap map = new MindMap(this);

        setContentView(R.layout.activity_main);
        ZoomLayout zoomLayout = findViewById(R.id.zoomLayoutContainer);
        zoomLayout.addView(map);
        setContentView(map);

    }
}

์ง€๋„๊ฐ€ ์‚ฌ์šฉ์ž ์ •์˜ ๋ณด๊ธฐ์ธ ๊ฒฝ์šฐ ๋ณด๊ธฐ๋ฅผ ํ™•์žฅํ•˜๊ณ  onDraw ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋ณด๊ธฐ์ด๊ฑฐ๋‚˜ ์„ ํ˜• ๋ ˆ์ด์•„์›ƒ์—์„œ ํ™•์žฅ๋˜๊ณ  ํ…์ŠคํŠธ ๋ณด๊ธฐ๋ฅผ ํฌํ•จํ•˜๋Š” TextElement ๋ฐ ๊ธฐํƒ€์™€ ๊ฐ™์€ ๊ธฐํƒ€ ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

package com.example.mindmapping;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
import android.widget.Toast;

public class MindMap extends View {

    private Context context;
    private Canvas canvas;
    private Paint brush;

    //Canvas Variables
    private float centerMarginX;
    private float centerMarginY;
    private float mWidth;
    private float mHeight;

    public MindMap(Context context) {
        super(context);
        this.context = context;

        initSetup();
    }

    <strong i="11">@Override</strong>
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        this.canvas = canvas;

        initDrawing();
    }

    public void initSetup() {
        brush = new Paint(Paint.ANTI_ALIAS_FLAG);
    }

    public void initDrawing() {

        brush.setStyle(Paint.Style.STROKE);
        brush.setStrokeWidth(10);
        brush.setColor(Color.parseColor("black"));
        canvas.drawText("Helo ",50,50,brush);

        mWidth = getMeasuredWidth();
        mHeight = getMeasuredHeight();

        centerMarginX = mWidth / 2;
        centerMarginY = mHeight / 2;

        TextElement textElement = new TextElement(context, "Main Topic");
        textElement.setX(centerMarginX - (textElement.getLayoutWidth() / 2));
        textElement.setY(centerMarginY - (textElement.getLayoutHeight() / 2));
        textElement.draw(canvas);

        TextElement textElement1 = new TextElement(context, "Another One");
        textElement1.setX(textElement.getX() + textElement.getLayoutWidth() + 600);
        textElement1.setY(textElement.getY() - textElement.getLayoutHeight());
        textElement1.draw(canvas);

        Toast.makeText(this.context,"Drawn",Toast.LENGTH_SHORT).show();
    }
}

onDraw ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด๋„ ZoomLayout์— ์ปค์Šคํ…€ ๋ทฐ(์ด ๊ฒฝ์šฐ ๋งต)๊ฐ€ ๊ทธ๋ ค์ง€์ง€ ์•Š์ง€๋งŒ ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ ๋Œ€์‹  setContentView์— ๋งต์„ ์„ค์ •ํ•˜๊ณ  ZoomLayout์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋งต์ด ์บ”๋ฒ„์Šค์— ๊ทธ๋ ค์ง€๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํ™•๋Œ€/์ถ•์†Œํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด ์‚ฌ์šฉ์ž ์ง€์ • ๋ณด๊ธฐ๋ฅผ ๊ทธ๋ฆฌ๋ ค๋ฉด

์‚ฌ์šฉ๋œ ๋ฒ„์ „

1.8.0

question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ฐ์‚ฌ ํ•ด์š” !

์žฌ์ •์˜๋œ onMeasure์—์„œ setMeasuredDimension์„ ํ˜ธ์ถœํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์™„์ „ํžˆ ์‚ฌ์šฉ์ž ์ •์˜๋œ ๋ณด๊ธฐ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฌธ์„œ!

๋‚ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  5 ๋Œ“๊ธ€

initDrawing() ์— ๊ทธ๋ ค์ง„ ํ—ฌ๋กœ ํ…์ŠคํŠธ๋„ ์บ”๋ฒ„์Šค์— ์•„๋ฌด๊ฒƒ๋„ ๊ทธ๋ ค์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ setContentView๋Š” ์ง€๋„๋ฅผ ํ…Œ์ŠคํŠธ๋กœ ๋ณด๊ธฐ๋กœ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์‹œ ํ˜ธ์ถœ๋˜์—ˆ์œผ๋ฉฐ, ์ฃผ์„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฑฐํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

whatever

์‚ฌ์šฉ์ž ์ •์˜ ๋ณด๊ธฐ๋Š” 0 ํฌ๊ธฐ๋กœ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๊ธฐ/์—๋ฎฌ๋ ˆ์ดํ„ฐ์˜ ๊ฐœ๋ฐœ์ž ์„ค์ •์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ Android Studio์˜ ๋ ˆ์ด์•„์›ƒ ๊ฒ€์‚ฌ๊ธฐ๋ฅผ ํ†ตํ•ด ๋ ˆ์ด์•„์›ƒ์„ ๋””๋ฒ„๊ทธํ•ด ๋ณด์„ธ์š”.

๊ฐ์‚ฌ ํ•ด์š” !

์žฌ์ •์˜๋œ onMeasure์—์„œ setMeasuredDimension์„ ํ˜ธ์ถœํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์™„์ „ํžˆ ์‚ฌ์šฉ์ž ์ •์˜๋œ ๋ณด๊ธฐ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฌธ์„œ!

๋‚ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
5 / 5 - 1 ๋“ฑ๊ธ‰