Dibuja un mapa de bits en mosaico a través de un androide Rect

Estoy tratando de dibujar un mapa de bits a lo largo de un rectángulo, pero no estoy seguro de cómo hacerlo. ¿Hay una manera de azulejo un mapa de bits a lo largo de un objeto Rect utilizando una propiedad de pintura o algo así? He buscado, pero no puedo encontrar nada que lo haga hacer lo que yo también lo necesito, la mayoría de las opciones de mosaico no lo azulearán para una instancia específica, lo azulearán a lo largo de toda la pantalla, así que todo lo que usa ese mapa de bits termina Hasta tener un gran mapa de bits mosaico a lo largo de todos ellos al mismo tiempo, sin desplazamiento o nada.

¿Algunas ideas? Si necesita más información, hágamelo saber, es una pregunta rara, así que sé que probablemente no mencioné algo importante.

Guillermo

Hay un par de maneras que puedes atacar esto. Voy a describir dos de ellos aquí …

De una sola mano:

Puede definir un BitmapDrawable alrededor del mapa de bits. Establezca su TileMode para repetir. Déle algunos límites a través de setBounds (rect) donde rect es su instancia Rect.

He aquí un breve ejemplo usando un contexto de View onDraw:

public class MyView extends View { Rect rect; Bitmap mBitmap; BitmapDrawable mDrawable; public MyView(Context context) { super(context); rect = new Rect(0, 0, 100, 100); mBitmap = loadBitmap(); mDrawable = new BitmapDrawable(context.getResources(), mBitmap); mDrawable.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT); mDrawable.setBounds(rect); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mDrawable.draw(canvas); } public Bitmap loadBitmap() { // included only for example sake Paint paint = new Paint(); paint.setColor(Color.RED); Bitmap bm = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bm); canvas.drawRect(0,0,10,10, paint); paint.setStyle(Style.STROKE); paint.setColor(Color.BLUE); canvas.drawRect(0, 0, 9, 9, paint); return bm; } } 

Nota:

También puede definir un BitmapDrawable en xml en lugar de hacerlo en código.

Además, si sabes que un drawable se está cargando a través de getResources (). GetDrawable (resourceId) es de hecho sólo un mapa de bits, puede convertirlo en un BitmapDrawable y establecer el TileMode allí. A la:

 public class MyView extends View { Rect rect; BitmapDrawable mDrawable; public MyView(Context context) { super(context); rect = new Rect(0, 0, 400, 240); mDrawable = (BitmapDrawable) context.getResources().getDrawable(R.drawable.ic_launcher); mDrawable.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT); mDrawable.setBounds(rect); this.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.ic_launcher)); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mDrawable.draw(canvas); } } 

Este ejemplo muestra el fondo que se estira, y una versión embaldosada que se dibuja encima de él.

De otra manera:

Bucle en la dirección xey dirección repetidamente el mapa de bits en el rect:

 public class MyView extends View { Rect rect; Bitmap mBitmap; public MyView(Context context) { super(context); rect = new Rect(0, 0, 100, 100); mBitmap = loadBitmap(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); final int bmWidth = mBitmap.getWidth(); final int bmHeight = mBitmap.getHeight(); for (int y = 0, height = rect.height(); y < height; y += bmHeight) { for (int x = 0, width = rect.width(); x < width; x += bmWidth) { canvas.drawBitmap(mBitmap, x, y, null); } } } public Bitmap loadBitmap() { // included only for example sake Paint paint = new Paint(); paint.setColor(Color.RED); Bitmap bm = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bm); canvas.drawRect(0,0,10,10, paint); paint.setStyle(Style.STROKE); paint.setColor(Color.BLUE); canvas.drawRect(0, 0, 9, 9, paint); return bm; } } 

Yo personalmente iría para el primer método (BitmapDrawable).

Puedes hacerlo como BitmapDrawable:

Defina Paint con shader de mapa de bits y luego dibuje rectángulo con esa pintura:

 > Paint paint = new Paint(); > paint.setShader(new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT)); > > canvas.drawRect(destRect, paint); 
  • Android - Definir el fondo de la aplicación
  • "No se pueden dibujar mapas de bits reciclados" con Picasso
  • Carga de mapas de bits grandes a ImageView en ViewPager - sin memoria
  • Cambiar el color del mapa de bits
  • Mostrar imágenes desde la carpeta Desplegable con Universal Image Loader
  • Tamaño de imagen de mapa de bits de Android en xml
  • Android: Bitmap recycle () ¿cómo funciona?
  • Mapbox GL utilizando mapas externos
  • OutOfMemory Error al intentar girar una imagen dentro de una vista de imagen
  • ¿Qué hay de malo en este método de cálculo inSampleSize para Bitmaps? Sin memoria
  • ¿Por qué a veces Bitmaps son los mismos objetos?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.