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

質問編集履歴

1

タイトルの変更、質問内容の修正

2020/08/18 05:14

投稿

Haruto513
Haruto513

スコア52

title CHANGED
@@ -1,1 +1,1 @@
1
- Androidアプリの操作をより高速にするにはまず何を確認するべきでしうか
1
+ 【質問内容修正】BitmapFactory.Options画像を縮小て読み込もとしたが上手く行ない
body CHANGED
@@ -7,4 +7,57 @@
7
7
  このようなUIの場合、動きを滑らかにしたいときはどの部分をまず改善するべきでしょうか。
8
8
  また、アプリの動きを滑らかにしたいと考えた時、まずどのような考え方をするべきでしょうか。
9
9
 
10
+ 宜しくお願い致します。
11
+
12
+ ### 追記
13
+ 質問内容を修正します。
14
+
15
+ 調べたところ、ダウンロードしてデータベースに保存し、ImageViewへ読み込むための画像のサイズが軒並み大きいため、縮小してから読み込もうと現在作業しています。
16
+ [https://qiita.com/exilias/items/38075e08ca45d223cf92](https://qiita.com/exilias/items/38075e08ca45d223cf92)
17
+ こちらのページで書かれていることを参考に、BitmapFactory.Optionsを使って縮小して読み込もうとしているのですが、10個ほどある画像のうち一つしかImageViewにセットできませんでした。
18
+ ページで書かれているのはJavaですが、Kotlinで以下のようなコードを書きました。
19
+
20
+ リサイクラービュアダプターのonBindViewHolder()の中に書いてあります。
21
+ holder.imageはカードビューの中に置いたImageViewです。
22
+ data[gazo_data]はデータベースから読み込んだ画像のデータです。
23
+
24
+ ```Kotlin
25
+
26
+ val gazoData = Base64.decode(data["gazo_data"] as ByteArray, Base64.DEFAULT)
27
+ if (BitmapFactory.decodeByteArray(gazoData, 0, gazoData.size) == null) {
28
+ val inst = assets.open("noimage.jpg")
29
+ val noImage = BitmapFactory.decodeStream(inst)
30
+ holder.image?.setImageBitmap(noImage)
31
+ }else {
32
+ val options = BitmapFactory.Options().apply { inJustDecodeBounds = true }
33
+ val bitmap = BitmapFactory.decodeByteArray(gazoData, 0, gazoData.size, options)
34
+ val imageHeight = options.outHeight
35
+ val imageWidth = options.outWidth
36
+ val maxSize: Int = 500
37
+ val scaleWidth: Float = (imageWidth / maxSize).toFloat()
38
+ val scaleHeight: Float = (imageHeight / maxSize).toFloat()
39
+
40
+ if (scaleWidth > 2 && scaleHeight > 2) {
41
+ val imageOptions = BitmapFactory.Options()
42
+ val standValue = (if (scaleWidth > scaleHeight) {
43
+ scaleHeight
44
+ } else {
45
+ scaleWidth
46
+ }).toDouble()
47
+ val imageScale: Int = Math.floor(standValue).toInt()
48
+ var i = 2
49
+ while (i <= imageScale) {
50
+ imageOptions.inSampleSize = i
51
+ i *= 2
52
+ }
53
+ val bitmap2 = BitmapFactory.decodeByteArray(gazoData, 0, gazoData.size, imageOptions)
54
+ holder.image?.setImageBitmap(bitmap2)
55
+ } else {
56
+ holder.image?.setImageBitmap(bitmap)
57
+ }
58
+ }
59
+
60
+ ```
61
+
62
+ どこかコードでおかしいところがあれば、指摘してくださると助かります。
10
63
  宜しくお願い致します。