2011-12-01 10 views
5

Quiero saber si hay alguna forma de utilizar native TextView o cualquier otro diseño de Android dentro de BaseAndEngine Activity.Cómo utilizar Textview nativo (Ver) en Andengine Game Activity

Mi aplicación está utilizando Andengine para una de sus pantallas completas. Esta pantalla se extiende desde BaseAndEngine y necesito usar una vista nativa como vista de texto dentro de esa pantalla. Debido a que Andengine no funciona bien para el texto árabe y tengo que mostrar algo de texto árabe en la pantalla de juegos.

O, si es posible, cómo mostrar el texto en árabe en texto modificable en Andengine. Como texto modificable, escriba árabe de izquierda a derecha en orden inverso.

+0

Hola, ¿u resuelve el problema de mostrar Árabe en texto modificable en andengine? me enfrento al mismo problema ahora. podría ayudarme –

Respuesta

4

Por supuesto que puede.

Compruebe este código - básicamente usted anula onSetContentView, luego puede configurar lo que desee.

@Override 
protected void onSetContentView() { 
    final FrameLayout frameLayout = new FrameLayout(this); 
    final FrameLayout.LayoutParams frameLayoutLayoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.FILL_PARENT); 

    this.mRenderSurfaceView = new RenderSurfaceView(this); 
    mRenderSurfaceView.setRenderer(mEngine); 
    final FrameLayout.LayoutParams surfaceViewLayoutParams = new FrameLayout.LayoutParams(super.createSurfaceViewLayoutParams()); 
    frameLayout.addView(this.mRenderSurfaceView, surfaceViewLayoutParams); 

    //Create any other views you want here, and add them to the frameLayout. 

    this.setContentView(frameLayout, frameLayoutLayoutParams); 
} 

(Este método va a su subclase de BaseGameActivity.)

También puede hacerlo a través de XML, pero creo que este método es más clara.

+0

Gracias por su respuesta. Creo que parece posible y directo. Intentaré esto y te lo haré saber. – Rai

+0

Ese es el código que uso para agregar un 'AdView' para juegos. – Jong

+0

Esta respuesta no muestra cómo usar un TextView IN Andengine sino cómo mostrar un OVER Andengine. @Rai podría aclarar que no necesitan integrar TextView con Andengine. –

-2

No puede usarlos directamente en AndEngine, porque los objetos en Andengine son objetos OpenGL. Pero puede usar el sistema operativo Android para dibujar un mapa de bits de cualquier vista estándar, y luego crear una textura y un objeto de esa vista. Esto es menos que óptimo para un caso como el texto árabe, pero funcionará. Tenga cuidado con las pérdidas de memoria a medida que crea los mapas de bits de sus vistas.

3

Puede usar Andengine para fuentes en árabe y en persa también. Pero de una manera diferente. para hacer eso, necesitas crear un Sprite y agregarle un mapa de bits. antes de que dibujes tu texto en ese mapa de bits.

El siguiente código es un ejemplo que dibuja el texto persa/árabe y lo adjunta a un sprite. para que podamos adjuntar el sprite a nuestra escena. este es un ejemplo para mostrar cómo podemos hacer eso, por lo que puede ajustar el mapa de bits y el tamaño del texto usted mismo. si su dispositivo es compatible con persa/árabe, este código funcionará correctamente. si el texto no aparece en su escena, cambie su posición, está fuera de la pantalla

la función de código de ejemplo imprimirá el "Persian Golf" en persa/árabe.

private void persianGolfPrinter(){ 
      BitmapTextureAtlas mBitmapTextureAtlas = new BitmapTextureAtlas(ResourceManager.getInstance().gameActivity.getTextureManager(), 400, 800, TextureOptions.BILINEAR); 
      ITextureRegion mDecoratedBalloonTextureRegion; 
      final IBitmapTextureAtlasSource baseTextureSource = new EmptyBitmapTextureAtlasSource(400, 800); 
      final IBitmapTextureAtlasSource decoratedTextureAtlasSource = new BaseBitmapTextureAtlasSourceDecorator(baseTextureSource) { 
        @Override 
        protected void onDecorateBitmap(Canvas pCanvas) throws Exception { 
          this.mPaint.setColor(Color.BLACK); 
          this.mPaint.setStyle(Style.FILL); 
          this.mPaint.setTextSize(32f); 
          this.mPaint.setTextAlign(Align.CENTER); 
          pCanvas.drawText("خلیج فارس", 150, 150, this.mPaint); 

        } 

        @Override 
        public BaseBitmapTextureAtlasSourceDecorator deepCopy() { 
          throw new DeepCopyNotSupportedException(); 
        } 
      }; 

      mDecoratedBalloonTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromSource(mBitmapTextureAtlas, decoratedTextureAtlasSource, 0, 0); 
      mBitmapTextureAtlas.load(); 

      Sprite test = new Sprite(0,0,mDecoratedBalloonTextureRegion,ResourceManager.getInstance().engine.getVertexBufferObjectManager()); 
      this.attachChild(test); 
    } 

no utilizan TextView androide ... que hace que su partido feo ....