所有,我的情况是: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,如何处理呢?
谢谢!
答案 0 :(得分:0)
如何处理ClassCastException
1)尝试将类的对象转换为另一个类时要小心。确保新类型属于其父类之一。
2)您可以使用Generics来防止ClassCastException,因为Generics提供了编译时检查,可用于开发类型安全的应用程序。
参考链接
在您的情况下
可能错了但是 我认为你应该使用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()));