求助,怎样把SurfaceView加入到Activity?

不知起什么名 2016-12-26 10:24:49
Cocos2dxActivity 基类

public abstract class Cocos2dxActivity extends Activity implements Cocos2dxHelperListener {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// FrameLayout
ViewGroup.LayoutParams framelayout_params =
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
mFrameLayout = new FrameLayout(this);
mFrameLayout.setLayoutParams(framelayout_params);

// Cocos2dxEditText layout
ViewGroup.LayoutParams edittext_layout_params =
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
Cocos2dxEditText edittext = new Cocos2dxEditText(this);
edittext.setLayoutParams(edittext_layout_params);

// ...add to FrameLayout
mFrameLayout.addView(edittext);

// Cocos2dxGLSurfaceView
this.mGLSurfaceView = this.onCreateView();

// ...add to FrameLayout
mFrameLayout.addView(this.mGLSurfaceView);

// Switch to supported OpenGL (ARGB888) mode on emulator
if (isAndroidEmulator())
this.mGLSurfaceView.setEGLConfigChooser(8 , 8, 8, 8, 16, 0);

this.mGLSurfaceView.setCocos2dxRenderer(new Cocos2dxRenderer());
this.mGLSurfaceView.setCocos2dxEditText(edittext);

// Set framelayout as the content view
setContentView(mFrameLayout);
}
}


游戏主Activity

public class MainActivity extends Cocos2dxActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}


从ijkplayer库里提取出来的代码 、 xml 与 接入代码

VideoView 相关的继承

public class VideoView extends SurfaceView implements


Layout

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0099cc"
tools:context=".PlayerActivity" >

<tv.danmaku.ijk.media.widget.VideoView
android:id="@+id/video_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center" />

<LinearLayout
android:id="@+id/buffering_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:focusable="false"
android:focusableInTouchMode="false"
android:orientation="vertical"
android:visibility="gone" >

<TextView
android:id="@+id/buffering_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="0"
android:scaleType="centerInside"
android:singleLine="true"
android:text="@string/buffering"
android:textSize="12sp" />

<ProgressBar
android:id="@+id/buffering_progress"
style="@android:style/Widget.ProgressBar.Large"
android:layout_width="60dip"
android:layout_height="60dip" />
</LinearLayout>

</FrameLayout>


sdk demo 的接入代码

public class VideoPlayerActivity extends Activity {
private VideoView mVideoView;
private View mBufferingIndicator;
private MediaController mMediaController;

private String mVideoPath;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_player);

IjkMediaPlayer.loadLibrariesOnce(null);
IjkMediaPlayer.native_profileBegin("libijkplayer.so");

mVideoPath = getIntent().getStringExtra("videoPath");

Intent intent = getIntent();
String intentAction = intent.getAction();
if (!TextUtils.isEmpty(intentAction) && intentAction.equals(Intent.ACTION_VIEW)) {
mVideoPath = intent.getDataString();
}

mBufferingIndicator = findViewById(R.id.buffering_indicator);
mMediaController = new MediaController(this);

mVideoView = (VideoView) findViewById(R.id.video_view);
mVideoView.setMediaController(mMediaController);
mVideoView.setMediaBufferingIndicator(mBufferingIndicator);
mVideoView.setVideoPath(mVideoPath);
mVideoView.requestFocus();
mVideoView.start();
}

@Override
protected void onDestroy() {
super.onDestroy();

IjkMediaPlayer.native_profileEnd();
}
}



那么怎么把 VideoView 加入到 MainAcvity ? 多谢~


...全文
503 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
developerzjy 2017-01-06
  • 打赏
  • 举报
回复
引用 8 楼 zhengchao109 的回复:
[quote=引用 5 楼 Simple_Simple_Simple 的回复:] 直接setContentView(VideoView对象) 或者像这样写在布局里,然后setContentView(R.layout.你的布局) <你自己的包名.VideoView android:id="@+id/video_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" />
不用这个方法加进去呢? setContentView[/quote] Cocos2dxActivity里面不是有很多这样的代码吗 mFrameLayout.addView(edittext); 把mFrameLayout定义成protect,那样子类可以继承它,在MainActivity里面也可以直接用mFrameLayout.addView(view)添加你的VideoView
不知起什么名 2017-01-05
  • 打赏
  • 举报
回复
引用 5 楼 Simple_Simple_Simple 的回复:
直接setContentView(VideoView对象) 或者像这样写在布局里,然后setContentView(R.layout.你的布局) <你自己的包名.VideoView android:id="@+id/video_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" />
不用这个方法加进去呢? setContentView
不知起什么名 2017-01-05
  • 打赏
  • 举报
回复
引用 5 楼 Simple_Simple_Simple 的回复:
直接setContentView(VideoView对象) 或者像这样写在布局里,然后setContentView(R.layout.你的布局) <你自己的包名.VideoView android:id="@+id/video_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" />
Cocos2dxActivity 已用这个方法 setContentView 加入了一个 游戏 SurfaceView..
不知起什么名 2017-01-05
  • 打赏
  • 举报
回复
引用 2 楼 u013405006 的回复:
public void setContentView(View view) { 这个方法实际上是可以直接把一个view当参数传进去的,把VideoView当参数传进去试试
Cocos2dxActivity 已加入了一个 游戏 SurfaceView, 不能重复用这个方法加吧?
索吻的贼 2017-01-05
  • 打赏
  • 举报
回复
引用 9 楼 u013405006 的回复:
[quote=引用 6 楼 zhengchao109 的回复:] [quote=引用 2 楼 u013405006 的回复:] public void setContentView(View view) { 这个方法实际上是可以直接把一个view当参数传进去的,把VideoView当参数传进去试试
Cocos2dxActivity 已加入了一个 游戏 SurfaceView, 不能重复用这个方法加吧? [/quote] 那就getContentView,然后addVIew进去呀。不知道你到底要实现什么样的效果。[/quote] 那就getContentView,然后addVIew进去呀。不知道你到底要实现什么样的效果
索吻的贼 2017-01-05
  • 打赏
  • 举报
回复
引用 6 楼 zhengchao109 的回复:
[quote=引用 2 楼 u013405006 的回复:] public void setContentView(View view) { 这个方法实际上是可以直接把一个view当参数传进去的,把VideoView当参数传进去试试
Cocos2dxActivity 已加入了一个 游戏 SurfaceView, 不能重复用这个方法加吧? [/quote] 那就getContextView,然后addVIew进去呀。不知道你到底要实现什么样的效果。
developerzjy 2016-12-28
  • 打赏
  • 举报
回复
直接setContentView(VideoView对象) 或者像这样写在布局里,然后setContentView(R.layout.你的布局) <你自己的包名.VideoView android:id="@+id/video_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" />
世外大帝 2016-12-27
  • 打赏
  • 举报
回复
你的VideoView是一个SurfaceView,那应该可以直接setContentView(VideoView对象)
世外大帝 2016-12-27
  • 打赏
  • 举报
回复
对游戏这块还真不是太清楚
索吻的贼 2016-12-27
  • 打赏
  • 举报
回复
public void setContentView(View view) { 这个方法实际上是可以直接把一个view当参数传进去的,把VideoView当参数传进去试试
不知起什么名 2016-12-26
  • 打赏
  • 举报
回复
居然没人回复....

80,355

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧