[問題] ListView內嵌ImageView的問題

看板AndroidDev作者 (Tails)時間12年前 (2014/02/10 17:24), 編輯推噓7(709)
留言16則, 4人參與, 最新討論串1/1
已有爬文+Google過 現在遇到的問題是,ImageView不知道該怎麼依長寬比做自動放大。 反之自動縮小是可以的。 我是在ListView裡用BaseAdapter去使用自定義的layout xml檔內容如下 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/pic" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_weight="5" android:adjustViewBounds="true" android:contentDescription="@null" android:padding="10dp" android:scaleType="fitCenter" /> <TextView android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_weight="1" android:gravity="left|center_vertical" android:padding="3dp" /> </LinearLayout> 該ImageView只要遇到比較大的圖,都會自動縮小 可是遇到比較小的圖,並不會自動放大 我是想要寬度要match_parent,並保持長寬比讓高度可以自動調整大小; 過大沒關係,上層讓ListView去滑就行了。 有查過ImageView有兩個屬性跟放大縮小有關的。 一個是adjustViewBounds,保持長寬比。 http://blog.csdn.net/ada168855/article/details/8645212 一個是scaleType,試過用CENTER_CROP會放大,不過會被裁掉,其他的設定了都不會變。 http://bluegray-javalearning.blogspot.tw/2011/06/imageviewscaletype.html 是有比較麻煩的方法:直接用XML設定固定高度,它真的就會變大了 有想到可以直接用程式去計算,可是試過它都不理我 :( 還是希望能直接從XML設定自動計算。 另外,圖的來源是從網路上載下來的,所以我不能控制原始圖檔的大小。 跪求神人解,感激不盡 <(_ _)> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.72.45

02/10 18:18, , 1F
用程式算要把scaleType 設成martrix才會理你
02/10 18:18, 1F

02/10 18:18, , 2F
更正 matrix
02/10 18:18, 2F
感覺程式計算應該是比較好的解吧? 應該可以適用在各種不同的螢幕大小和方向 我再試看看這個方法 感謝

02/10 21:00, , 3F
LinearLayout不要用match試過嗎
02/10 21:00, 3F
fill_parent wrap_content 兩個都試過了,跟match_parent結果一樣。

02/11 01:22, , 4F
Bimap bi=BitmapFactory.createScaleBitmap();
02/11 01:22, 4F

02/11 01:23, , 5F
抓取圖片來源時 用FileInput轉出Stream 再用Bitmap
02/11 01:23, 5F

02/11 01:24, , 6F
decodeStream抓出original圖片 最後用creatScaleBitmap
02/11 01:24, 6F

02/11 01:25, , 7F
不過要特別注意recycle()回收bitmap占用的RAM 不然會OOM
02/11 01:25, 7F
唔,baobomb大的意思應該是重新產生適合符合尺寸的圖,再重新顯示吧? 這個我也有想過,不過OOM的問題太困難了,所以我都是交給AQuery處理的Orz... ※ 編輯: tails32100 來自: 220.134.72.45 (02/11 10:52)

02/12 21:47, , 8F
不用複製bitmap阿 Imageview source code沒幾行 看一下
02/12 21:47, 8F

02/12 21:48, , 9F
scale情形他用matrix怎麼設 依樣畫葫蘆就行了
02/12 21:48, 9F

02/18 13:16, , 10F
喔喔抱歉我理解錯誤 我以為他說的從網路上載圖
02/18 13:16, 10F

02/18 13:16, , 11F
是要在程式中實作動態載圖 如果是把圖片放在
02/18 13:16, 11F

02/18 13:17, , 12F
res裡的話就不用bitmap了
02/18 13:17, 12F

02/18 13:19, , 13F
話說android的oom問題實在是很煩人 唉
02/18 13:19, 13F

02/18 13:21, , 14F
我記得scaletype裡有個設定可以讓圖片
02/18 13:21, 14F

02/18 13:21, , 15F
大於或等於妳所設定的最小圖片寬高 可以試試看
02/18 13:21, 15F
centerCrop,但是圖片會被切掉Orz 現在覺得ListView的情況還好,配合螢幕寬去設value/dimens.xml還能看 今天發現要是ViewPager+ScrollView 配上比螢幕高的圖就GG了 因為高是未知數,調固定寬又沒用.... 目前還在找解.... ※ 編輯: tails32100 來自: 220.134.72.45 (02/19 09:45) 目前有想到一個偷吃步的解法: 直接用WebView就可以了... HTML碼如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width;initial-scale=1.0; maximum-scale=3.0; user-scalable=1;"> <style type="text/css"> html,body,img { margin: 0px; padding: 0px; width: 100%; } body { padding-top:20px; } </style> </head> <body> <img src="file:///sdcard/file.png"/> </body> </html> 原本一直讀不到本機的檔案,後來發現是這個設定沒加... WebSettings websettings = webView.getSettings(); websettings.setAllowFileAccess(true); ※ 編輯: tails32100 來自: 59.126.68.4 (02/20 02:05)

02/21 22:14, , 16F
scaletype:centerInside試試
02/21 22:14, 16F
有試過了,謝謝你的建議 :) 我後來有想過 會不會是因為圖片是動態載入才會有這樣的問題 因為別人的文章就很正常... http://blog.csdn.net/xilibi2003/article/details/6628668 等等來做實驗Orz... ※ 編輯: tails32100 來自: 59.126.68.4 (02/22 21:25) 後來試到一半想到,別人的文章是已經固定住長寬了 就跟我設固定高的意思是一樣了.... 有去解出你管的原始碼,也是用固定高解決。 ※ 編輯: tails32100 來自: 59.126.68.4 (02/22 22:51)
文章代碼(AID): #1I-9hEWy (AndroidDev)
文章代碼(AID): #1I-9hEWy (AndroidDev)