编程式ImageView和Picasso

3

我对Android开发比较新,但我遇到了以下问题。我试图通过编程方式创建几个ImageView并使用Picasso加载图像,但我遇到了以下问题。

编辑:我想要实现的是,我希望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
你想使用那个不起作用的版本是有原因的,还是只是好奇为什么它不起作用? - APH
问题在于图像根本没有显示出来。我想要做的是让图像被加载并填充父级容器,而不仅仅是作为一个固定大小的图像展示。 - Ioannis I
2个回答

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);
            }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接