Zoomlayout: Cara menggambar tampilan khusus di ZoomLayout

Dibuat pada 28 Sep 2020  ·  5Komentar  ·  Sumber: natario1/ZoomLayout

Bagaimana saya?

Bagaimana cara menggambar tampilan kustom saya yang dapat diperbesar dengan menggunakan perpustakaan ini?

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

    }
}

Di mana peta adalah Tampilan Kustom, memperluas Tampilan & Mengganti Metode onDraw, Ini berisi elemen lain seperti TextElement & Lainnya yang juga merupakan tampilan khusus atau memanjang dari tata letak linier dan berisi tampilan teks: Seperti Ini

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

Tampilan kustom (peta dalam kasus ini) tidak digambar dalam ZoomLayout meskipun metode onDraw dipanggil tetapi ketika saya mengatur peta di setContentView alih-alih file tata letak dan tidak menggunakan ZoomLayout , Peta digambar di kanvas, saya ingin untuk menggambar tampilan khusus saya yang harus dapat diperbesar dengan perpustakaan ini

Versi yang digunakan

1.8.0

question

Komentar yang paling membantu

Terima kasih !

Saya perlu memanggil setMeasuredDimension di override onMeasure , karena ini adalah tampilan yang sepenuhnya disesuaikan , docs !

Masalah saya telah terpecahkan.

Semua 5 komentar

Tidak ada yang digambar di kanvas, bahkan teks helo itu, yang digambar di initDrawing()

setContentView itu telah dipanggil lagi untuk mengatur peta sebagai tampilan sebagai ujian, itu adalah komentar, menghapusnya tidak menyelesaikan masalah

whatever

Tampilan kustom Anda dapat digambar dengan ukuran 0. Coba debug tata letak Anda, baik menggunakan setelan pengembang di perangkat/emulator, atau melalui pemeriksa tata letak Android Studio.

Terima kasih !

Saya perlu memanggil setMeasuredDimension di override onMeasure , karena ini adalah tampilan yang sepenuhnya disesuaikan , docs !

Masalah saya telah terpecahkan.

Apakah halaman ini membantu?
5 / 5 - 1 peringkat