根据位图设置FrameLayout的高度和宽度

时间:2012-08-30 08:18:23

标签: android exception

我正在尝试根据FrameLayout设置Bitmap的宽度和高度,我在下面做了

        Bitmap theBitmap = BitmapFactory.decodeFile(theFileImage.toString());
        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(theBitmap.getWidth(), theBitmap.getHeight());
        frame.setLayoutParams(lp);
        image.setLayoutParams(lp);
        image.setImageBitmap(theBitmap);

但我得到ClassCastException

我做错了什么?

编辑:

java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams

2 个答案:

答案 0 :(得分:15)

要设置布局参数,您需要使用其父级的内部类LayoutParams。

例如:如果在RelativeLayout中有一个LinearLayout,并且需要设置Linear Layout的布局参数,则需要使用RelativeLayout的LayoutParams内部类。否则它会产生ClassCastException。

因此,在您的情况下,要设置FrameLayout的Layoutparams,您需要使用其父布局的布局参数。假设您的布局如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<FrameLayout
    android:id="@+id/flContainer"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/image"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</FrameLayout>

</RelativeLayout>

代码:

    FrameLayout frame=(FrameLayout) findViewById(R.id.flContainer);  
    ImageView image=(ImageView) findViewById(R.id.image);
    Bitmap theBitmap = BitmapFactory.decodeFile(theFileImage.toString());
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(theBitmap.getWidth(), theBitmap.getHeight());
    frame.setLayoutParams(lp);
    image.setImageBitmap(theBitmap);

答案 1 :(得分:1)

看到ClassCastException我认为你在这里做了一些非法行为,有几个问题,框架图片是什么?

如果frame是对FrameLayout的引用,则必须使用

FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(theBitmap.getWidth(), theBitmap.getHeight());

如果有帮助,请告诉我。