teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2018/07/08 04:51

投稿

f-miyu
f-miyu

スコア1625

answer CHANGED
@@ -48,4 +48,39 @@
48
48
 
49
49
  ```C#
50
50
  ImageService.Instance.LoadUrl(url).Into(imageView):
51
- ```
51
+ ```
52
+
53
+ ### 追記
54
+ 今のコードのままでは、少し問題が出てくるかもしれません。
55
+
56
+ 0. 画像取得に失敗(通信できないなど)したら、Taskが終わらない
57
+ 1. スクロールしなければ、画像の読み込みが行われない
58
+
59
+ 1.に関しては、`DownloadDataCompleted`を以下のように修正すれば、大丈夫かと思います。
60
+ ```C#
61
+ webClient.DownloadDataCompleted += (sender, e) =>
62
+ {
63
+ Bitmap image = null;
64
+ try
65
+ {
66
+ if (!e.Cancelled && e.Error == null)
67
+ {
68
+ var imageBytes = e.Result;
69
+ if (imageBytes != null && imageBytes.Length > 0)
70
+ {
71
+ image = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length);
72
+ }
73
+ }
74
+ }
75
+ finally
76
+ {
77
+ tcs.SetResult(image);
78
+ }
79
+ };
80
+ ```
81
+ ただ、`GetImageBitmapFromUrl`が`null`を返すので、このメソッドを使っている`SetThumb`では、nullチェックが必要になります。
82
+
83
+ 2.に関しては、`SetThumb`で、`imageView`のサイズチェックをして、0なら処理を行なっていないためです。この時`imageView`はまだサイズが確定していないので、`Width`、`Height`は0を返します。
84
+ よくよく見ると、リサイズ処理は行っているようですが、使ってはいないようなので、サイズチェック自体を行わないようにするのが一番簡単かと思います。
85
+
86
+ 先に述べたライブラリを使えば、リサイズも簡単に行ってくれるので、できるなら使用することを強くお勧めします。