Comment puis-je dessiner ma vue personnalisée qui peut devenir zoomable avec l'utilisation de cette bibliothèque
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);
}
}
Où la carte est une vue personnalisée, étend la méthode View & Overrides onDraw, elle contient d'autres éléments tels que TextElement & Other qui sont également des vues personnalisées ou s'étendent à partir d'une mise en page linéaire et contiennent une vue de texte : comme ceci
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();
}
}
La vue personnalisée (la carte dans ce cas) n'est pas dessinée dans le ZoomLayout même si la méthode onDraw est appelée, mais lorsque je définis la carte dans setContentView au lieu du fichier de mise en page et que je n'utilise pas ZoomLayout, la carte est dessinée sur le canevas, je veux pour dessiner ma vue personnalisée qui devrait être zoomable avec cette bibliothèque
1.8.0
Rien n'est dessiné sur le canevas, pas même ce texte helo, dessiné dans initDrawing()
que setContentView a été appelé à nouveau pour définir la carte comme une vue en tant que test, c'était un commentaire, le supprimer ne résout pas le problème
Votre vue personnalisée peut être dessinée avec une taille 0. Essayez de déboguer votre mise en page, soit en utilisant les paramètres du développeur sur l'appareil/l'émulateur, soit via l'inspecteur de mise en page d'Android Studio.
Merci !
J'avais besoin d'appeler setMeasuredDimension dans onMeasure surchargé, car il s'agit d'une vue entièrement personnalisée, docs!
Mon problème a été résolu.
Commentaire le plus utile
Merci !
J'avais besoin d'appeler setMeasuredDimension dans onMeasure surchargé, car il s'agit d'une vue entièrement personnalisée, docs!
Mon problème a été résolu.