Cómo mosaico de un mapa de bits en una lona

Me gustaría crear un aspecto de papel gráfico para el mapa de bits que estoy dibujando a través de un lienzo, y tratando de averiguar la mejor manera de hacer esto.

No puedo pasar un mapa de bits de origen que contenga el fondo de gráfico para el constructor de lienzo, ya que estoy recibiendo el lienzo en un SurfaceView a través de la llamada .lockCanvas ().

Algunas soluciones que he probado:

  • He intentado implementar esta solución en Thread.run () de mi SurfaceView, pero el problema que creo es cuando el BitmapDrawable se convierte en un mapa de bits … pierde las propiedades de mosaico.

    Canvas = mSurfaceHolder.lockCanvas (null); BitmapDrawable TileMe = new BitmapDrawable (BitmapFactory.decodeResource (getResources (), R.drawable.editor_graph)); TileMe.setTileModeX (Shader.TileMode.REPEAT); TileMe.setTileModeY (Shader.TileMode.REPEAT);

    Bitmap b = TileMe.getBitmap (); Canvas.drawBitmap (b, 0, 0, null);

  • Si utilizo el método Canvas.drawBitmap que toma un destino RectF como un parámetro , parece que el mapa de bits se mosaico para rellenar el RectF … pero ¿cómo puedo declarar un RectF de forma fiable que llena todo el área de vista?

  • También no funciona el ajuste del fondo de las actividades a la apariencia de papel gráfico deseada, ya que el diseño de mapa de bits / lienzo es opaco y bloquea su visualización.

¿Alguna idea de cómo lograrlo?

Usted tiene dos soluciones fáciles:

  • Utilice un BitmapDrawable, pero en lugar de extraer el Bitmap, simplemente llame a BitmapDrawable.draw (Canvas). No olvide establecer los límites del dibujable para llenar su área de dibujo.
  • Crear una pintura con un BitmapShader y dibujar un rectángulo con él (esto es básicamente lo que hace BitmapDrawable).

Estoy seguro de que hay una manera de obtener un efecto de mosaico con un SurfaceView . Desafortunadamente, parece que no puede utilizar el BitmapDrawable con un lienzo. Por lo que probablemente tendría que implementar su propio método de mosaico personalizado mediante la creación de su propia serie de Rect 's en el Canvas y el dibujo de un mapa de bits a escala de cada uno.

Sinceramente, no sería tan difícil. Basta con obtener la anchura / altura de la vista, y crear una matriz de Rect 's sobre la base de estos datos que va a dibujar el Bitmap de Bitmap .

Alternativamente, si usted no necesita hacer modificaciones al fondo de mosaico real sobre la marcha, sólo dibujar como un fondo y dibujar el SurfaceView en la parte superior de la misma. Ese mensaje que enlazó proporcionó múltiples soluciones al mosaico de un BitmapDrawable que podría implementar.

  • Cómo desenfocar un mapa de bits (Android)?
  • El uso de getPixels () de la clase Bitmap de Android y cómo usarla
  • ArrayIndexOutOfBoundsException en android.graphics.Bitmap $ Config.nativeToConfig en dispositivos Samsung
  • ¿Por qué esto no funciona a veces?
  • Crear Bitmap NullPointerException
  • Android: Dibuja varios mapas de bits en otro mapa de bits
  • Android - cómo evitar la memoria sobre la carga mediante mapas de bits?
  • ¿Hay una manera de fijar el backgound de la barra de acción por la imagen en androide?
  • Escala de Android zoom zoomout mapa de bits en lienzo
  • Android: FaceDetector no funciona. findface detecta siempre la cara cero;
  • No se puede comprimir un mapa de bits reciclado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.