在ImageView中设置图像的宽度和高度

6
无论我尝试什么方法,都无法设置从soap服务传递到我的android模拟器的图像的宽度和高度。 我正在使用以下ImageView:
            byte[] bloc = Base64.decode(result, Base64.DEFAULT);         
            Bitmap bmp = BitmapFactory.decodeByteArray(bloc,0,bloc.length);    
            ImageView image = new ImageView(this);
            image.setImageBitmap(bmp);
            image.setLayoutParams(
                    new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT, 
                            LinearLayout.LayoutParams.WRAP_CONTENT)); 
            image.getLayoutParams().height = 100;
            image.getLayoutParams().width = 100;
            setContentView(image);

在上面的代码中,我试图手动设置一个具有259像素宽度和194像素高度的jpeg图像的宽度和高度。
/res/layout/main.xml看起来像:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:weightSum="1" android:id="@+id/llid">
</LinearLayout>

在尝试下面答案中的一些方法之后,我在我的模拟器上只看到了以下内容。我甚至不确定我所采取的方法是否正确。大多数我从搜索论坛中找到的解决方案对我来说都不起作用。有什么建议吗?

image.getLayoutParams() 返回的是已在此视图上设置的只读值(getter),它们不是用于运行时的设置器。 - IgorGanapolsky
4个回答

10

试试这样做。利用yourBitmap.getWidth().getHeight()

  image.setLayoutParams(
              new LinearLayout.LayoutParams(
                     bmp.getWidth(), 
                     bmp.getHeight())); 

编辑:

现在您已经为ImgView设置了LP,第一件事是将其添加到布局中。

LinearLayout ll = (LinearLayout)findViewById(R.layout.llid);

现在您可以直接添加视图,或者像分离参数并使用.addView(view, params).addView(View)一样添加视图。随便您怎么做。

因此您这样做:

ll.addView(image);

希望它能起作用。


我不认为我的线性布局有一个ID(请参见上面的main.xml)。所以我需要在我的线性布局中设置一个ID,这样我才能检索它吗?谢谢。 - Joeblackdev
正确!为您的LL设置ID。 - Nikola Despotoski
没问题,我清理了项目,异常已经消失了。现在我遇到了一个“非法状态异常”,因为这行代码 setContentView(image); 导致的。它说,“指定的子项已经有一个父项。你必须先调用 'removeView()' 方法来移除子项的父项”。 - Joeblackdev
1
删除以下代码:image.getLayoutParams().height = 100; image.getLayoutParams().width = 100; setContentView(image); - Nikola Despotoski
3
因为setContentView()是为您之前所做的活动设置显式视图(即设置主xml),并且通过这个操作,您为ImageView设置了父级,并且使用blabla.height = 100仅分配了一个从未使用过的值。希望我表述得足够清晰和简单 :D - Nikola Despotoski
显示剩余4条评论

3
如果你改变了这个,会发生什么:
new LinearLayout.LayoutParams(
   LinearLayout.LayoutParams.WRAP_CONTENT, 
   LinearLayout.LayoutParams.WRAP_CONTENT)); 

致:

new LinearLayout.LayoutParams(width, height);

..这个对象是否放置在LinearLayout中?


嗨。不幸的是,这没有起作用。我的ImageView在LinearLayout中。我已经更新了原始帖子,并附上了/res/layout/main.xml文件。 - Joeblackdev

1

我不确定您在哪个范围内手动设置图像视图,但如果是在给定ImageView的onMeasure被调用之前,那么这可能是为什么它会遵守XML布局参数的原因。

您可以尝试重载ImageView的onMeasure方法,并在那里调用setMeasuredDimension(100,100)来手动设置它。


-1

试一下这个

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width,height);
imageView.setLayoutParams(params);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接