2015-07-27 9 views
2

Я довольно новичок в разработке Android, но у меня есть следующая проблема. Я пытаюсь создать несколько ImageViews программно и использовать Picasso для загрузки изображения, и я наткнулся на следующую проблему.Programmatic imageview и picasso

EDIT: То, что я пытаюсь добиться, я хочу, чтобы ImageView быть создана с шириной = FILL_PARENT и высота = WRAP_CONTENT

См код извлекает ниже:

Этот пример работает, но не то, что я хочу (загружает изображения)

LinearLayout articleBodyLL = (LinearLayout) findViewById(R.id.articleBody); 
ImageView articleTitleImageView = (ImageView) findViewById(R.id.articleTitleImageView); 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(300,300); 
params.gravity= Gravity.CENTER_HORIZONTAL; 
[...] 
ImageView iv = new ImageView(this); 
setImage(iv, imageURL); 
articleBodyLL.addView(iv, params); 
[...] 
private void setImage(final ImageView imageView, final String imgURL) { 
Picasso.with(ArticleProvider.getContext()) 
.load(imgURL) 
.fit().centerCrop() 
.error(R.drawable.default_image) 
.into(imageView); 
} 

Этот пример не работает (изображения не показаны)

LinearLayout articleBodyLL = (LinearLayout) findViewById(R.id.articleBody); 
ImageView articleTitleImageView = (ImageView) findViewById(R.id.articleTitleImageView); 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); 
params.gravity= Gravity.CENTER_HORIZONTAL; 
[...] 
ImageView iv = new ImageView(this); 
setImage(iv, imageURL); 
articleBodyLL.addView(iv, params); 
[...] 
private void setImage(final ImageView imageView, final String imgURL) { 
Picasso.with(ArticleProvider.getContext()) 
.load(imgURL) 
.fit().centerCrop() 
.error(R.drawable.default_image) 
.into(imageView); 
} 
+1

что проблема точно, что вы столкнулись? – Aakash

+0

Есть ли причина, по которой вы хотите использовать версию, которая не работает, или это просто любопытство о том, почему она не работает? – APH

+0

Проблема в том, что изображение вообще не отображается. Что я пытаюсь сделать, так это то, что изображение должно быть загружено и заполнить родительский элемент, а не просто отображаться как фиксированный размер. –

ответ

1

Посмотрите на этот код. это прекрасно работает. Предполагается, что если вы пытаетесь сформировать какой-то список, посмотрите на RecyclerView, чтобы избежать исключений (за исключением: p).

LinearLayout articleBodyLL = (LinearLayout) findViewById(R.id.articleBody); 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); 
params.gravity= Gravity.CENTER_HORIZONTAL; 
ImageView iv = new ImageView(this); 
iv.setScaleType(ImageView.ScaleType.FIT_XY); 
setImage(iv, "http://square.github.io/picasso/static/sample.png"); 
        articleBodyLL.addView(iv, params); 

     ////////////////////////////////////////////// 
    private void setImage(final ImageView imageView, final String imgURL) { 
     Picasso.with(this) 
      .load(imgURL) 
      .error(R.mipmap.ic_launcher) 
      .into(new Target() { 
       @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
       Log.e("loaded", "onBitmapLoaded: loaded"); 
       imageView.setImageBitmap(bitmap); 
       imageView.invalidate(); 
       } 

       @Override public void onBitmapFailed(Drawable errorDrawable) { 
       Log.e("loaded", "onBitmapFailed: load failed"); 
       } 

       @Override public void onPrepareLoad(Drawable placeHolderDrawable) { 

       } 
      }); 
     } 
0
myLinearLayout = new LinearLayout(this); 
    myLinearLayout.setOrientation(LinearLayout.VERTICAL); 

     for (int z = 0; z < zCont.length; z++) { 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(100, 100); 
       params.gravity= Gravity.LEFT;//CENTER_HORIZONTAL 
       params.setMargins(-20, 0, 0, -10); 
       ImageView iv = new ImageView(this); 
       iv.setScaleType(ImageView.ScaleType.FIT_XY); 
       setImage(iv, "http://sait.ru/fotota/rua.jpeg"); 
       myLinearLayout.addView(iv, params); 
     } 

    private void setImage(final ImageView imageView, final String imgURL) { 
       Picasso.with(this) 
         .load(imgURL) 
         .fit().centerCrop() 
         .error(R.mipmap.ic_launcher) 
         .into(imageView); 
      } 
Смежные вопросы