Android图像是从文件中以编程方式添加的,大小不正确

Android图像是从文件中以编程方式添加的,大小不正确,android,android-layout,android-image,android-resources,android-drawable,Android,Android Layout,Android Image,Android Resources,Android Drawable,我有一个Android应用程序,它在可扩展的列表视图中显示数据集合。可展开列表视图只有一个子视图。在该子级中,我添加了几个TextView元素,最后一个元素之后是ImageView 这就是问题所在 如果我使用drawable文件夹设置图像资源,其显示如下: R.drawable.test_image ImageView drinkImage = (ImageView) inflater.inflate(R.layout.drink_image, null, false); // FileStri

我有一个Android应用程序,它在可扩展的列表视图中显示数据集合。可展开列表视图只有一个子视图。在该子级中,我添加了几个TextView元素,最后一个元素之后是ImageView

这就是问题所在

如果我使用drawable文件夹设置图像资源,其显示如下:

R.drawable.test_image
ImageView drinkImage = (ImageView) inflater.inflate(R.layout.drink_image, null, false);
// FileString is "/storage/sdcard0/.WhatToDrink/drinkImages/1388450237870.jpg" 
Drawable drinkImageDrawable = Drawable.createFromPath(fileString);

drinkImage.setImageDrawable(drinkImageDrawable);

但如果我以编程方式添加图像,如下所示:

ImageView drinkImage = (ImageView) inflater.inflate(R.layout.drink_image, null, false);
// FileString is "/storage/sdcard0/.WhatToDrink/drinkImages/1388450237870.jpg" 
Drawable drinkImageDrawable = Drawable.createFromPath(fileString);

drinkImage.setImageDrawable(drinkImageDrawable);
它显示如下:

ImageView drinkImage = (ImageView) inflater.inflate(R.layout.drink_image, null, false);
// FileString is "/storage/sdcard0/.WhatToDrink/drinkImages/1388450237870.jpg" 
Drawable drinkImageDrawable = Drawable.createFromPath(fileString);

drinkImage.setImageDrawable(drinkImageDrawable);

相同的文件。我从存储器中抓取了文件本身,并将其移动到我的可绘制文件夹中,然后以这种方式添加,效果非常好

ImageView xml代码:

<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentDescription="Drink Image"
    android:id="@+id/drink_image"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

ExpandableListView XML代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.bluelimecrew.whattodrink.DrinkListActivity.DrinkListFragment">
    <LinearLayout
            android:id="@+id/listContainer"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:orientation="vertical">
        <ExpandableListView
                android:id="@+id/drinkList"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">
        </ExpandableListView>
    </LinearLayout>

    <Button
            android:id="@+id/backToDashboard"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            style="@style/nextButtons"
            android:text="@string/backToDashboard" />
</LinearLayout>

有什么想法吗


我在运行安卓4.1.1的Galaxy Nexus上运行这个,我不确定,因为图像可能很复杂,但是试试这个

<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentDescription="Drink Image"
    android:id="@+id/drink_image"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

将没有上下文信息,因此无法正确缩放位图(因为它不知道屏幕密度等)

正如您在源代码中看到的,它将调用
drawableFromBitmap(null,bm,null,null,pathName)
。第一个参数(
null
)是资源引用

相反,请使用接收
上下文
资源
的构造函数,以便它可以正确地缩放它

检查


您可以看到,不接收资源的BitmapDrawable构造函数是。

我已经尝试了所有不同的布局宽度和布局高度选项。这就是整个XML布局。我将其放大,并将其添加到可扩展列表视图中。将我的问题编辑为ExpandableListView。您的意思是使用BitmapDrawable吗?另一个构造函数?我很困惑。既然你知道它是一个位图,是的,我建议直接使用BitmapDrawable,这样你就可以传递资源了。如果您检查Drawable类的源代码,您将看到
Drawable.createFromPath
加载位图并调用,这也创建了BitmapDrawable。