Подтвердить что ты не робот

Установить высоту и ширину FrameLayout на основе растрового изображения

Я пытаюсь установить ширину и высоту 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
4b9b3361

Ответ 1

Для установки параметров макета вам необходимо использовать внутренний класс LayoutParams его родителя.

Например: если у вас есть LinearLayout внутри RelativeLayout, и если вам нужно установить параметры макета Linear Layout, вам нужно использовать внутренний класс LayoutParams RelativeLayout. В противном случае это приведет к исключению ClassCastException.

Итак, в вашем случае, для установки LayoutPairs FrameLayout, вам нужно использовать его родительские макеты Layout Layout. Предположим, что ваш макет похож:

<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);

Ответ 2

Увидев ClassCastException, я предполагаю, что вы делаете что-то незаконное здесь, пару вопросов, каковы кадр и изображение?

Если фрейм является ссылкой на FrameLayout, вам нужно будет использовать

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

Сообщите мне, если это поможет.