Como faço para desenhar minha visualização personalizada, que pode ser ampliada com o uso desta 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);
}
}
Onde o mapa é uma visualização personalizada, estende o método View & Overrides onDraw, contém outros elementos como TextElement e Other que também são visualizações personalizadas ou estendendo-se do layout linear e contêm uma visualização de texto:
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();
}
}
A visualização personalizada (mapa, neste caso) não é desenhada no ZoomLayout, embora o método onDraw seja chamado, mas quando eu defino o mapa em setContentView em vez do arquivo de layout e não uso ZoomLayout, o mapa é desenhado na tela, eu quero para desenhar minha visualização personalizada, que deve ser ampliada com esta biblioteca
1.8.0
Nada é desenhado na tela, nem mesmo aquele texto helicoidal desenhado em initDrawing ()
que setContentView foi chamado novamente para definir o mapa como uma visualização como um teste, era um comentário, removê-lo não resolve o problema
Sua visualização personalizada pode ser desenhada com tamanho 0. Tente depurar seu layout, usando a configuração do desenvolvedor no dispositivo / emulador ou por meio do inspetor de layout do Android Studio.
Obrigado !
Eu precisava chamar setMeasuredDimension em onMeasure substituído, porque essa é uma visualização totalmente personalizada, docs!
Meu problema foi resolvido.
Comentários muito úteis
Obrigado !
Eu precisava chamar setMeasuredDimension em onMeasure substituído, porque essa é uma visualização totalmente personalizada, docs!
Meu problema foi resolvido.