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
1.8.0
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
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.
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.