Ursprünglich dachte ich Sie Glück sein könnte und dies könnte ein einfacher Fall von Überschreiben der onDraw(Canvas)
Methode des TextureView sein, so etwas zu tun:
final int xTiles = 5;
final int yTiles = 5;
@Override
public void onDraw(Canvas canvas){
int widthPerTile = canvas.getWidth()/xTiles;
int heightPerTile = canvas.getHeight()/yTiles;
float widthScale = widthPerTile/(float) canvas.getWidth();
float heightScale = heightPerTile/(float) canvas.getHeight();
for(int x = 0; x < xTiles; x++){
for(int y = 0; y < yTiles; y++){
canvas.save();
canvas.translate(x * widthPerTitle, y * heightPerTile);
canvas.scale(widthScale, heightScale);
super.onDraw(canvas);
canvas.restore();
}
}
}
Dann werden Sie brauchen nur ein CustomTextureView bis unter die ganzer Bildschirm und es wird viel aussehen, denn es wird sich oft selbst zeichnen.
Dies funktioniert jedoch nicht wie der TextureView. Die TextureView verfügt stattdessen über eine Dummy-Methode onDraw(Canvas)
und verwendet stattdessen ihre eigene Methode draw(Canvas)
, die endgültig ist und daher nicht überschrieben werden kann. Die TextureView verwendet OpenGL, um die Frames von der Kamera zu zeichnen, und es ist ziemlich kompliziert, sich selbst in diesen Prozess zu injizieren, obwohl es möglich scheint, folgende Beispiele zu finden, die diskutiert werden können: here. Dies ist ein fortgeschrittenes Thema und wahrscheinlich ein bisschen viel für einen Samstagmorgen für mich, um eine prägnante Antwort zu schreiben.
Aber ich habe es geschafft, etwas zusammen schnell zu hacken, dass Sie die Vorteile nehmen von möglicherweise in der Lage und laufen mit, obwohl es einige offensichtliche Probleme in Bezug auf Gedächtnis und Framerate hat:
public class CopyCatTextureView extends View {
TextureView textureViewToCopy;
public CopyCatTextureView(Context context) {
super(context);
}
public void setTextureViewToCopy(TextureView view){
this.textureViewToCopy = view;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(textureViewToCopy != null){
textureViewToCopy.draw(canvas);
}
}
}
Wenn Sie Ein Raster einer einzelnen TextureView und der Rest sind diese CopyCatTextureViews, Sie können setTextureViewToCopy(TextureView)
auf jeder der Kopie Katzen anrufen, um auf die einzelne TextureView zeigen und rufen Sie einfach invalidate()
auf jedem der Kopie Katzen, wann immer Sie ein Frame-Update wollen. Offensichtlich ist das nicht ideal, aber es ist schnell und wird sicherlich funktionieren, wenn Sie nur einen einzelnen Rahmen möchten.
Hoffe, das hilft. Viel Glück.
Ich glaube nicht, dass das funktionieren wird. 'TextureView' zeichnet nicht wie normale' View's, und ich denke es macht 'onDraw()' 'final' trotzdem, IIRC. –
Sie haben Recht, es ist endgültig. Lass mich sehen was ich machen kann. – DanielLaneDC
Ich habe meine Antwort mit meinen Ergebnissen bearbeitet. – DanielLaneDC