12

我正在尝试根据FrameLayouta 设置 的宽度和高度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
4

2 回答 2

15

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

例如:如果你在RelativeLayout里面有一个LinearLayout,如果你需要设置LinearLayout的布局参数,你需要使用RelativeLayout的LayoutParams内部类。否则它将给出 ClassCastException。

因此,在您的情况下,要设置 FrameLayout 的 Layoutparams ,您需要使用其父 Layout 的 Layout Params。假设您的布局是这样的:

<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);
于 2012-08-30T08:44:36.750 回答
1

看到ClassCastException我假设你在这里做一些非法的事情,几个问题,什么是frameimage

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

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

让我知道这是否有帮助。

于 2012-08-30T08:31:30.747 回答