android 如何实现弹幕,Android简单实现弹幕效果

本文实例为大家分享了Android实现弹幕效果的具体代码,供大家参考,具体内容如下

首先分析一下,他是由三层布局来共同完成的,第一层视频布局,第二层字幕布局,第三层输入框布局,要想让这三个布局在同一页面上,必须用相对布局或帧布局。

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/activity_main"

tools:context="com.bwie.danmustudy.MainActivity">

android:id="@+id/video_view"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

/>

android:id="@+id/danmaku_view"

android:layout_width="match_parent"

android:layout_height="match_parent"

/>

android:id="@+id/operation_text"

android:layout_width="match_parent"

android:layout_height="50dp"

android:layout_alignParentBottom="true"

android:visibility="gone"

android:background="#fff"

android:orientation="horizontal"

>

android:id="@+id/edit_text"

android:layout_weight="1"

android:layout_width="0dp"

android:layout_height="match_parent" />

android:id="@+id/send"

android:text="send"

android:layout_width="wrap_content"

android:layout_height="match_parent" />

创建一个弹幕的解析器

public class MainActivity extends AppCompatActivity {

private boolean showDanmaku;

private DanmakuView danmakuView;

private DanmakuContext danmakuContext;

//创建一个弹幕的解析器

private BaseDanmakuParser parser=new BaseDanmakuParser() {

@Override

protected IDanmakus parse() {

return new Danmakus();

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//播放视频

VideoView video_view= (VideoView) findViewById(R.id.video_view);

Uri uri=Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.minion_08);

video_view.setVideoURI(uri);

video_view.start();

danmakuView= (DanmakuView) findViewById(R.id.danmaku_view);

//调用了enableDanmakuDrawingCache()方法来提升绘制效率,也就是绘制速度

// 又调用了setCallback()方法来设置回调函数。

danmakuView.enableDanmakuDrawingCache(true);

danmakuView.setCallback(new DrawHandler.Callback() {

@Override

public void prepared() {

showDanmaku=true;

danmakuView.start();

}

@Override

public void updateTimer(DanmakuTimer timer) {

}

@Override

public void danmakuShown(BaseDanmaku danmaku) {

}

@Override

public void drawingFinished() {

}

});

danmakuContext=danmakuContext.create();

//第一个参数是弹幕的解析器

//调用DanmakuView的prepare()方法来进行准备,准备完成后会自动调用刚才设置的回调函数中的prepared()方法

danmakuView.prepare(parser,danmakuContext);

final LinearLayout operationLayout= (LinearLayout) findViewById(R.id.operation_text);

final Button send= (Button) findViewById(R.id.send);

final EditText edit_text= (EditText) findViewById(R.id.edit_text);

danmakuView.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

if (operationLayout.getVisibility()==View.GONE){

operationLayout.setVisibility(View.VISIBLE);

}else{

operationLayout.setVisibility(View.GONE);

}

}

});

send.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

String content=edit_text.getText().toString();

if (!TextUtils.isEmpty(content)){

addDanmaku(content,true);

edit_text.setText("");

}

}

});

}

@Override

public void onWindowFocusChanged(boolean hasFocus) {

super.onWindowFocusChanged(hasFocus);

if (hasFocus&& Build.VERSION.SDK_INT>=19){

View decorView=getWindow().getDecorView();

decorView.setSystemUiVisibility(

View.SYSTEM_UI_FLAG_LAYOUT_STABLE

|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

|View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

|View.SYSTEM_UI_FLAG_HIDE_NAVIGATION

|View.SYSTEM_UI_FLAG_FULLSCREEN

|View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

);

}

}

private void addDanmaku(String content,boolean withBorder){

BaseDanmaku danmaku=danmakuContext.mDanmakuFactory

.createDanmaku(BaseDanmaku.TYPE_SCROLL_RL);

danmaku.text=content;

danmaku.padding=5;

danmaku.textSize=50;

danmaku.setTime(danmakuView.getCurrentTime());

if (withBorder){

danmakuView.addDanmaku(danmaku);

}

}

最后使页面横屏展示:

只需要加这一行代码就可以

android:screenOrientation="landscape"

>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值