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.
- Disminuye el tamaño de la imagen sin perder su calidad en Android
- Android - Bitmap.CreateBitmap - excepción de puntero nulo
- Manejo de mapas de bits grandes
- Cómo cambiar el tamaño del mapa de bits después de capturar la imagen a través de mi aplicación
- Asignación de mapa de bits, utilizando BitmapFactory.Options.inBitmap arroja IllegalArgumentException
Guillermo
- Android Drawable: el mapa de bits de repetición de lista de capas no se carga cuando está totalmente cubierto
- JNI operaciones de mapa de bits, para ayudar a evitar OOM cuando se utilizan imágenes grandes
- Android tratando de redondear las esquinas de mapa de bits
- Crear un nuevo mapa de bits y dibujar nuevos píxeles en él
- Android: anchura y altura del mapa de bits sin cargarlo
- Creación de un mapa de bits escalado con createScaledBitmap en Android
- Define el recuento de bytes de mapa de bits y establece el límite en el búfer de mapa de bits
- Cargar imagen de url en la notificación de Android
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);
- Utilizar un EditText para filtrar un ListView de SimpleCursorAdapter-backed
- Ignorar las pruebas de la unidad de Android dependiendo del nivel de SDK