これがピカソのコードです:
ImageView img = (ImageView)findViewById(R.id.product_image);
Picasso.with(this)
.load(_url)
.fit()
.into(img, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
}
});
_urlの値は次のとおりです。 http://kiagallery.ir/Images/Upload/Collection%20101/Spring%20101/d4a03b66dc7b46c694615c549b78b2e9.jpg
そしてここにxmlがあります:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<ImageView
Android:id="@+id/product_image"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
<TextView
Android:id="@+id/product_name"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textSize="13sp"
Android:layout_below="@id/product_image"/>
<TextView
Android:id="@+id/product_price"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textSize="13sp"
Android:layout_below="@id/product_name"/>
</RelativeLayout>
ブラウザ経由で画像にアクセスできるが、ピカソが画像の読み込みに失敗したことがわかるので、onError関数を確認しましたが、呼び出されませんでした。
編集: 200dpのようにimageviewの幅と高さの固定値を指定すると画像が読み込まれますが、wrap_contentに変更すると画像が表示されません。
私の推測では、ImageView
の幅と高さがWRAP_CONTENT
によって定義されている間は、ピカソのfit()
メソッドをしないでください。
このメソッドは、ImageView
が測定されるまで待機し、イメージのサイズを正確に一致するようにサイズ変更します。 ImageView
がWRAP_CONTENT
で定義されたサイズを持っている間、メソッドgetMeasuredWidth()
およびgetMeasuredHeight()
は0を返し、ImageView
が見えなくなります。
マニフェストへの追加権限を忘れないでください
<manifest ...>
<uses-permission Android:name="Android.permission.INTERNET" />
NetworkPolicy(NetworkPolicy.OFFLINE)を使用している場合、ピカソを使用して画像を取得できない可能性があります。
ViewPager
の画像がフルスクリーンDialogFragment
内に配置されるという同様の問題に直面していました。同じViewPagerを別の場所に配置すると完全に機能し、ピカソは期待どおりに画像をロードしました。ただし、フルスクリーンDialogFragment
に配置した場合にのみ、一部の画像が空白で表示されます。サーバーから画像が正常にフェッチされ、ImageView
にロードされたようですが、ImageView
はまだ空白のように見えました。
上記の回答または同様のスレッドのどれも私にとってうまくいきませんでした。
それで、私は Glide と呼ばれる別の素晴らしいライブラリに切り替えました。ピカソとよく似ています。詳細は here および here をご覧ください。これは最も適切な答えではないかもしれませんが、同様の問題で立ち往生している人に一撃を与える価値があるかもしれません。