원래, 나는 당신이 운이 될 줄 알았는데이이 같은 작업을 수행 할 TextureView의 onDraw(Canvas)
메서드를 재정의 간단한 경우가 있습니다 만 하나 CustomTextureView가 복용해야합니다
다음
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();
}
}
}
전체 화면으로 표시되며 많은 시간이 걸릴 것이므로 많이 보일 것입니다.
그러나 이것은 TextureView의 작동 방식이 아닙니다. TextureView는 대신 더미 onDraw(Canvas)
메서드를 가지고 있으며, 대신 final 인 고유 한 draw(Canvas)
메서드를 사용하므로 오버라이드 할 수 없습니다. TextureView는 카메라에서 프레임을 그리기 위해 OpenGL을 사용하고 있습니다.이 과정에서 자신을 삽입하는 것은 꽤 복잡합니다. 예를 들어 here과 같은 예제가 있습니다. 이것은 진보 된 토픽이며 실제로 토요일 아침에 간결한 답을 쓰는 데 도움이 될 것입니다.
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);
}
}
}
당신이 가지고있는 경우는 메모리와 프레임 속도와 관련하여 몇 가지 분명한 문제가 있지만
, 나는 함께 빠르게 활용하고 실행할 수있을 것을 무언가를 해킹 관리 않았다 하나의 TextureView 그리드와 나머지는이 CopyCatTextureViews이므로 각 복사본 고양이에 setTextureViewToCopy(TextureView)
을 호출하여 단일 TextureView를 가리킨 다음 프레임 업데이트가 필요할 때마다 각 복사본 고양이에 invalidate()
을 호출하면됩니다. 분명히 이것은 이상적은 아니지만, 단 하나의 프레임 만 원한다면 빠르며 확실히 작동 할 것입니다.
희망이 도움이됩니다. 행운을 빌어 요.
나는 이것이 효과가있을 것이라고 생각하지 않습니다. 'TextureView'는 보통'View'처럼 그리지 않으며, IIRC는'onDraw()'final을 만듭니다. –
네 말이 맞아. 마지막이야. 내가 뭘 할 수 있는지 보자. – DanielLaneDC
나는 내 결과를 편집했습니다. – DanielLaneDC