ClassCastException:android.widget.RelativeLayout $ LayoutParams无法强制转换为android.widget.FrameLayout $ LayoutParams

时间:2015-03-07 06:15:15

标签: android video android-fragments fragment

所有,我的情况是:activity包含viewpager,viewpager包含一些片段,片段的主要功能是播放视频,有很多关于视频的功能,包含缩放视频,缩小视频等等但是当我触发缩放视频的功能时,例外情况就是:

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

但是当我使用FrameLayout.LayoutParams时,例外情况也是如此:

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

片段的根视图的xml是:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    android:id="@+id/header_wrapper"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="@dimen/player_height">


    <RelativeLayout
        android:id="@+id/view_holder"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true">

        <com.baidu.cyberplayer.core.BVideoView
            android:id="@+id/video_view"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/controlbar"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">

        <Button
            android:id="@+id/play_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_gravity="center_vertical"
            android:background="@drawable/play_btn_style" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="15dp"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/time_current"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:paddingLeft="4dip"
                android:paddingRight="4dip"
                android:paddingTop="4dip"
                android:text="00:00"
                android:textColor="@color/play_time"
                android:textSize="14sp"
                android:textStyle="bold" />

            <SeekBar
                android:id="@+id/media_progress"
                style="?android:attr/progressBarStyleHorizontal"
                android:layout_width="0dip"
                android:layout_height="30dip"
                android:layout_weight="1" />

            <TextView
                android:id="@+id/time_total"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:paddingLeft="4dip"
                android:paddingRight="4dip"
                android:paddingTop="4dip"
                android:text="00:00"
                android:textColor="@color/play_time"
                android:textSize="14sp"
                android:textStyle="bold" />

            <Button
                android:id="@+id/zoom_btn"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:background="@drawable/screensize_zoomout_button" />
        </LinearLayout>
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/VideoAction"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true">

        <ImageView
            android:id="@+id/detailPic"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:adjustViewBounds="false"
            android:contentDescription="@null"
            android:scaleType="fitXY"
            android:src="@drawable/big_bg" />

        <ImageButton
            android:id="@+id/pre_play_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:background="#00000000"
            android:contentDescription="@null"
            android:src="@drawable/play_btn_style"
            android:visibility="invisible" />

        <com.basv.gifmoviewview.widget.GifMovieView
            android:id="@+id/loading_gif"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            app:gif="@drawable/big_loading" />
    </RelativeLayout>
</RelativeLayout>

缩放视频的功能代码是:

    RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams(
            Screen.getScreenWidth(getActivity().getWindowManager()),
            Screen.getScreenHeight(getActivity().getWindowManager()));
    mHeaderWrapper.setLayoutParams(param);
    mVV.setLayoutParams(param);
    mZoomButton.setBackgroundResource(R.drawable.screensize_zoomin_button);
    mCurrentScape = OrientationHelper.LANDSCAPE;

我认为上述代码位置的例外处罚:

    RelativeLayout.LayoutParams param = new  RelativeLayout.LayoutParams(
    Screen.getScreenWidth(getActivity().getWindowManager()),
    Screen.getScreenHeight(getActivity().getWindowManager()));

我想实现这个功能:缩放和缩小视频,使视频在片段全屏显示,并使视频缩小。

或者,我应该使用哪种LayoutParams?

如您所知,问题出现在&#34; mHeaderWrapper.setLayoutParams(param);&#34;,我使用方法&#34; mHeaderWrapper.getParent&#34;要知道布局mHeaderWrapper的父级,它就是

&#34;的 android.support.v4.app.NoSaveStateFrameLayout &#34;,

但是没有android.support.v4.app.NoSaveStateFrameLayout.LayoutParams,如何处理呢?

谢谢!

3 个答案:

答案 0 :(得分:0)

如何处理ClassCastException

1)尝试将类的对象转换为另一个类时要小心。确保新类型属于其父类之一。

2)您可以使用Generics来防止ClassCastException,因为Generics提供了编译时检查,可用于开发类型安全的应用程序。

参考链接

http://examples.javacodegeeks.com/java-basics/exceptions/java-lang-classcastexception-how-to-solve-class-cast-exception/

在您的情况下

可能错了但是 我认为你应该使用framelayout ..

答案 1 :(得分:0)

我认为当你将layoutparams设置为mheaderwrapper时会发生异常。什么是它的父母?

答案 2 :(得分:0)

尝试更改

RelativeLayout.LayoutParams param = new  RelativeLayout.LayoutParams(
    Screen.getScreenWidth(getActivity().getWindowManager()),
    Screen.getScreenHeight(getActivity().getWindowManager()));

FrameLayout.LayoutParams param = new  FrameLayout.LayoutParams(
    Screen.getScreenWidth(getActivity().getWindowManager()),
    Screen.getScreenHeight(getActivity().getWindowManager()));