¿Cómo dibujo mi vista personalizada que se puede ampliar con el uso de esta biblioteca?
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);
}
}
Donde el mapa es una vista personalizada, extiende la vista y anula el método de dibujo, contiene otros elementos como TextElement y otros que también son vistas personalizadas o que se extienden desde el diseño lineal y contienen una vista de texto: como este
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 vista personalizada (mapa en este caso) no se dibuja en ZoomLayout aunque se llama al método onDraw, pero cuando configuro el mapa en setContentView en lugar del archivo de diseño y no uso ZoomLayout, el mapa se dibuja en el lienzo, quiero para dibujar mi vista personalizada que debería ser ampliable con esta biblioteca
1.8.0
No se dibuja nada en el lienzo, ni siquiera ese texto de helo, dibujado en initDrawing ()
que setContentView ha sido llamado nuevamente para configurar el mapa como una vista como prueba, era un comentario, eliminarlo no resuelve el problema
Su vista personalizada puede dibujarse con tamaño 0. Intente depurar su diseño, ya sea utilizando la configuración del desarrollador en el dispositivo / emulador, o mediante el inspector de diseño de Android Studio.
Gracias !
Necesitaba llamar a setMeasuredDimension en onMeasure anulado, porque esta es una vista completamente personalizada, ¡documentos!
Mi problema ha sido resuelto.
Comentario más útil
Gracias !
Necesitaba llamar a setMeasuredDimension en onMeasure anulado, porque esta es una vista completamente personalizada, ¡documentos!
Mi problema ha sido resuelto.