ListView和位图内的ImageView未完全显示

时间:2014-07-02 15:46:28

标签: android listview bitmap

我遇到了包含ImageView的ListView的问题,它在平板电脑上工作正常,但在我的手机上没有...

这是预期的输出(在我的平板电脑上): enter image description here

这是实际输出(在我的手机上): enter image description here

我尝试使用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的一部分: enter image description here

3 个答案:

答案 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);

这样我总是以像素的形式得到源图像的真实部分。