Zoomlayout: So zeichnen Sie eine benutzerdefinierte Ansicht in ZoomLayout

Erstellt am 28. Sept. 2020  ·  5Kommentare  ·  Quelle: natario1/ZoomLayout

Wie mache ich?

Wie zeichne ich meine benutzerdefinierte Ansicht, die mit dieser Bibliothek zoombar werden kann?

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);

    }
}

Wo Map eine benutzerdefinierte Ansicht ist, erweitert View & Overrides onDraw Method, Es enthält andere Elemente wie TextElement & Other, die ebenfalls benutzerdefinierte Ansichten sind oder sich aus einem linearen Layout erstrecken und eine Textansicht enthalten:

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();
    }
}

Die benutzerdefinierte Ansicht (in diesem Fall die Karte) wird nicht im ZoomLayout gezeichnet, obwohl die onDraw-Methode aufgerufen wird um meine benutzerdefinierte Ansicht zu zeichnen, die mit dieser Bibliothek zoombar sein sollte

Verwendete Version

1.8.0

question

Hilfreichster Kommentar

Vielen Dank !

Ich musste setMeasuredDimension in überschriebenem onMeasure aufrufen, da dies eine vollständig angepasste Ansicht ist, docs!

Mein Problem ist gelöst.

Alle 5 Kommentare

Nichts wird auf der Leinwand gezeichnet, nicht einmal dieser Helo-Text, der in initDrawing() gezeichnet wird

dass setContentView erneut aufgerufen wurde, um die Karte testweise als Ansicht festzulegen, es war ein Kommentar, das Entfernen löst das Problem nicht

whatever

Ihre benutzerdefinierte Ansicht kann mit der Größe 0 gezeichnet werden. Versuchen Sie, Ihr Layout zu debuggen, indem Sie entweder die Entwicklereinstellung auf dem Gerät/Emulator verwenden oder den Layout-Inspektor von Android Studio verwenden.

Vielen Dank !

Ich musste setMeasuredDimension in überschriebenem onMeasure aufrufen, da dies eine vollständig angepasste Ansicht ist, docs!

Mein Problem ist gelöst.

War diese Seite hilfreich?
5 / 5 - 1 Bewertungen

Verwandte Themen

kuoliangkwong picture kuoliangkwong  ·  4Kommentare

lucasrsv picture lucasrsv  ·  3Kommentare

aouledissa picture aouledissa  ·  10Kommentare

YiHaoHuang picture YiHaoHuang  ·  10Kommentare

Yahor10 picture Yahor10  ·  5Kommentare