Мое приложение хранит изображения в FirebaseFirestore;они могут быть в формате jpg или png.У меня есть Activity, которая рисует сетку на Canvas
, и я хочу поместить изображения в сетку.Общая сетка + изображения называется ImageGrid и определяется следующим образом (несколько вещей не учитываются для удобства чтения):
public class ImageGrid extends View {
private final Context mContext;
private int mNumRows, mNumCols;
private float canvas_height, canvas_width;
private final Paint mPaint;
private float image_cell_size;
private String[][] image_urls;
public ImageGrid(Context thisContext, AttributeSet attrs) {
super(thisContext, attrs);
mContext = getContext();
mPaint = new Paint();
}
public void setSize(int numRows, int numCols) {
mNumRows = numRows;
mNumSts = numCols;
invalidate();
}
public void setImages(String[][] images) {
image_urls = images;
}
// DRAW GRID FUNCTIONS set up the grid and add the images
protected void onDraw(Canvas canvas) {
canvas_height = canvas.getHeight();
canvas_width = canvas.getWidth();
get_cell_size(); // Get the size of the cells
// image_cell_size has now been set by get_cell_size
// Draw axes & chart
draw_images(canvas); // Draw the images
}
// Draw images
private void draw_images(final Canvas canvas) {
if (mChart == null) return;
final Resources resources = mContext.getResources();
FirebaseStorage mStorage = FirebaseStorage.getInstance();
final StorageReference mStorageRef = mStorage.getReference();
for (int rr = 0; rr < mNumRows; rr++) {
for (int cc = 0; cc < mNumSts; cc++) {
String drawableUrl = image_urls[rr][cc];
if(drawableUrl != null) {
* THIS IS WHERE I NEED TO GET THE IMAGE AND DISPLAY IT *
}
}
}
}
}
Итак, после поиска в Интернете, как получить изображение и затем нарисовать его наХолст, у меня есть это:
mStorageRef.child(drawableUrl)
.getDownloadUrl()
.addOnSuccessListener(
new OnSuccessListener<Uri>() {
public void onSuccess(Uri uri) {
Glide.with(getContext())
.asBitmap()
.load(uri)
.into(new CustomTarget<Bitmap>() {
public void onResourceReady(
Bitmap resource,
Transition<? super Bitmap> transition) {
Drawable d = new BitmapDrawable(getResources(), resource);
d.setBounds(
cc * cell_size,
rr * cell_size,
(cc + 1)*cell_size,
(rr + 1) * cell_size);
d.draw(canvas);
}}});
Это извлекает изображение из базы данных;когда я проверяю отладчик, d
выглядит нормально - он содержит правильное изображение.Затем я устанавливаю углы изображения с помощью setBounds - опять же, значения, которые здесь вычисляются, выглядят правильно, по сравнению с размером холста и количеством изображений, в которые я помещаюсь. Наконец, изображение должно быть нарисовано на холсте- нет сообщения об ошибке, но ничего не появляется.
Я действительно не знаю, что проверить дальше, или что еще попробовать.Кто-нибудь может предложить что-нибудь, что может работать?