Zoomlayout: كيفية رسم عرض مخصص في ZoomLayout

تم إنشاؤها على ٢٨ سبتمبر ٢٠٢٠  ·  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);

    }
}

عندما تكون الخريطة عبارة عن طريقة عرض مخصصة ، فإنها تمدد طريقة العرض والتجاوز على طريقة الرسم ، فهي تحتوي على عناصر أخرى مثل TextElement & Other التي تعد أيضًا طرق عرض مخصصة أو تمتد من التخطيط الخطي وتحتوي على عرض نص: مثل هذا

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

لا يتم رسم العرض المخصص (الخريطة في هذه الحالة) في ZoomLayout على الرغم من استدعاء طريقة onDraw ولكن عندما أقوم بتعيين الخريطة في setContentView بدلاً من ملف التخطيط ولا أستخدم ZoomLayout ، يتم رسم الخريطة على اللوحة القماشية ، أريد لرسم طريقة العرض المخصصة الخاصة بي والتي يجب أن تكون قابلة للتكبير باستخدام هذه المكتبة

الإصدار المستخدم

1.8.0

question

التعليق الأكثر فائدة

شكرا !

احتجت إلى استدعاء setMeasuredDimension في onMeasure الذي تم تجاوزه ، لأن هذه طريقة عرض مخصصة بالكامل ، docs!

تم حل مشكلتي.

ال 5 كومينتر

لا شيء مرسوم على القماش ، ولا حتى هذا النص الهلو المرسوم في initDrawing ()

تم استدعاء هذا setContentView مرة أخرى لتعيين الخريطة كطريقة عرض كاختبار ، لقد كان تعليقًا ، وإزالته لا يحل المشكلة

whatever

قد يتم رسم العرض المخصص الخاص بك بحجم 0. حاول تصحيح تخطيطك ، إما باستخدام إعداد المطور على الجهاز / المحاكي ، أو من خلال مفتش تخطيط Android Studio.

شكرا !

احتجت إلى استدعاء setMeasuredDimension في onMeasure الذي تم تجاوزه ، لأن هذه طريقة عرض مخصصة بالكامل ، docs!

تم حل مشكلتي.

هل كانت هذه الصفحة مفيدة؟
5 / 5 - 1 التقييمات