我遇到了包含ImageView的ListView的问题,它在平板电脑上工作正常,但在我的手机上没有...
这是预期的输出(在我的平板电脑上):
这是实际输出(在我的手机上):
我尝试使用drawable,它在我的手机上运行良好。 以下是我创建Bitmap并将其绑定到视图的方法:
Bitmap srcBmp = BitmapFactory.decodeResource(rcontext.getResources(), R.drawable.portrait);
Bitmap modBmp = Bitmap.createBitmap(srcBmp,0,0,60,60);
((ImageView) view).setImageBitmap(thebmp);
我的行布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="60px"
android:layout_height="60px"
android:id="@+id/charIcon"
android:src="@drawable/blason" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/charName"/>
</LinearLayout>
我真的不明白为什么会这样做...... 我对android很新,但这真的很奇怪
编辑:blason只在我的drawable文件夹中,其大小为60x60像素
EDIT2:我正在使用这个Bitmap.createBitmap(srcBmp,0,0,60,60);因为我只需要这部分图像(应该显示整个头部)。这是portrait.png的一部分:
答案 0 :(得分:0)
添加
android:scaleType="fitXY"
到你的imageview
答案 1 :(得分:0)
Bitmap.createBitmap将使用位图的来源,并将为您提供切割。就是你在结果中看到的内容。
尝试使用: 而是createScaled bitmap。
修改强> 如果您什么都不做,imageView将为您进行搜索。所以最好的解决方案就是删除新的位图行:
Bitmap srcBmp = BitmapFactory.decodeResource(rcontext.getResources(), R.drawable.portrait);
//Bitmap modBmp = Bitmap.createBitmap(srcBmp,0,0,60,60);
((ImageView) view).setImageBitmap(thebmp);
在xml中添加缩放模式,如@blipinsk建议。
android:scaleType="fitXY"
编辑2 :尝试将LinearLayout更改为WrapContent,父级可能小于60px
编辑3: BitmapFactory.decodeResource
将在设备密度中进行解码,除非您传递的选项设置为:使用真实尺寸。所以这可能是你想要做的,因为你正在使用像素。
答案 2 :(得分:0)
我终于找到了答案! 即使您没有提供不同版本的图像,BitmapFactory.decodeResource也会根据设备像素密度缩放png。 您可以像这样禁用缩放
BitmapFactory.Options opt=new BitmapFactory.Options();
opt.inScaled=false;
srcBmp = BitmapFactory.decodeResource(rcontext.getResources(), R.drawable.portrait, opt);
这样我总是以像素的形式得到源图像的真实部分。