Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ListView中的ImageView和位图未完全显示_Android_Listview_Bitmap - Fatal编程技术网

Android ListView中的ImageView和位图未完全显示

Android ListView中的ImageView和位图未完全显示,android,listview,bitmap,Android,Listview,Bitmap,我对包含ImageView的ListView有问题,它可以在平板电脑上正常工作,但在我的手机上不行 以下是预期输出(在我的平板电脑上): 以下是实际输出(在我的手机上): 我试着用了一个抽绳器,它在我的手机上很好用。 以下是创建位图并将其绑定到视图的方法: Bitmap srcBmp = BitmapFactory.decodeResource(rcontext.getResources(), R.drawable.portrait); Bitmap modBmp = Bitmap.crea

我对包含ImageView的ListView有问题,它可以在平板电脑上正常工作,但在我的手机上不行

以下是预期输出(在我的平板电脑上):

以下是实际输出(在我的手机上):

我试着用了一个抽绳器,它在我的手机上很好用。 以下是创建位图并将其绑定到视图的方法:

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>

我真的不明白为什么会这样。。。 我对安卓很陌生,但这真的很奇怪

编辑:blason仅在我的可绘制文件夹中,其大小为60x60像素

EDIT2:我正在使用这个Bitmap.createBitmap(srcBmp,0,0,60,60);因为我只需要图像的这一部分(应该显示整个头部)。下面是grait.png的一部分:

添加

android:scaleType="fitXY"

创建位图将使用位图的源,并将为您提供位图的一部分。就是你在结果中看到的

尝试使用: 相反

编辑: 如果不执行任何操作,imageView将为您缩放它。因此,最好的解决方案就是删除新的位图行:

Bitmap srcBmp = BitmapFactory.decodeResource(rcontext.getResources(), R.drawable.portrait);
//Bitmap modBmp = Bitmap.createBitmap(srcBmp,0,0,60,60);
((ImageView) view).setImageBitmap(thebmp);
并在xml中添加scale模式,如@blipinsk

android:scaleType="fitXY"
编辑2:尝试将LinearLayout更改为WrapContent,父级可能小于60px


编辑3:
BitmapFactory.decodeResource
将在设备密度中解码,除非您通过一个选项设置,该设置显示使用真实大小。这可能就是你想要做的,因为你正在处理像素。

我终于找到了答案! BitmapFactory.decodeResource将根据设备像素密度缩放png,即使您没有提供不同版本的图像。 您可以像这样禁用缩放

    BitmapFactory.Options opt=new BitmapFactory.Options();
    opt.inScaled=false;
    srcBmp = BitmapFactory.decodeResource(rcontext.getResources(), R.drawable.portrait, opt);

通过这种方式,我总能得到源图像的真实部分,以像素为单位。

您使用的是px。尝试使用dp。如果您的drawable文件夹中有图像,并且其尺寸完美,那么为什么不使用
imageView.setImageResource(R.drawable.blason)进行设置呢dp/px似乎不是这里的问题。在我的平板电脑上显示的是整个头部,而不是在手机上,无论我使用的是什么尺寸ImageView@Shivam_Verma:blason资源只是一个默认图像,以防我以后找不到好的字符显示。这正是我切割60x60第一像素的目的:/I我有一种不同字符头的精灵,我只需要一个,这就是为什么我要剪掉它。scaleType并不像我回答的那样修复它blipinsk@Lectem那么,结果出了什么问题?在我看来,平板电脑和我的手机之间的区别非常明显,平板电脑的切割正确(你可以看到整个头部),而在手机上你只能看到itI的一部分。我尝试使用android:layout\u width=“wrap\u content”android:layout\u height=“wrap\u content”但它不起作用either@Lectem而这只能是一件事。您使用的图像不同