作者tails32100 (Tails)
看板AndroidDev
标题[问题] ListView内嵌ImageView的问题
时间Mon Feb 10 17:24:24 2014
已有爬文+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
1F:推 zxc190:用程式算要把scaleType 设成martrix才会理你 02/10 18:18
2F:→ zxc190:更正 matrix 02/10 18:18
感觉程式计算应该是比较好的解吧?
应该可以适用在各种不同的萤幕大小和方向
我再试看看这个方法
感谢
3F:→ xzeertacat:LinearLayout不要用match试过吗 02/10 21:00
fill_parent
wrap_content
两个都试过了,跟match_parent结果一样。
4F:推 baobomb:Bimap bi=BitmapFactory.createScaleBitmap(); 02/11 01:22
5F:→ baobomb:抓取图片来源时 用FileInput转出Stream 再用Bitmap 02/11 01:23
6F:→ baobomb:decodeStream抓出original图片 最後用creatScaleBitmap 02/11 01:24
7F:→ baobomb:不过要特别注意recycle()回收bitmap占用的RAM 不然会OOM 02/11 01:25
唔,baobomb大的意思应该是重新产生适合符合尺寸的图,再重新显示吧?
这个我也有想过,不过OOM的问题太困难了,所以我都是交给AQuery处理的Orz...
※ 编辑: tails32100 来自: 220.134.72.45 (02/11 10:52)
8F:推 tac0wu:不用复制bitmap阿 Imageview source code没几行 看一下 02/12 21:47
9F:→ tac0wu:scale情形他用matrix怎麽设 依样画葫芦就行了 02/12 21:48
10F:推 baobomb:喔喔抱歉我理解错误 我以为他说的从网路上载图 02/18 13:16
11F:→ baobomb:是要在程式中实作动态载图 如果是把图片放在 02/18 13:16
12F:→ baobomb:res里的话就不用bitmap了 02/18 13:17
13F:推 baobomb:话说android的oom问题实在是很烦人 唉 02/18 13:19
14F:推 baobomb:我记得scaletype里有个设定可以让图片 02/18 13:21
15F:→ baobomb:大於或等於你所设定的最小图片宽高 可以试试看 02/18 13:21
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)
16F:推 baobomb:scaletype:centerInside试试 02/21 22:14
有试过了,谢谢你的建议 :)
我後来有想过
会不会是因为图片是动态载入才会有这样的问题
因为别人的文章就很正常...
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)