本文实例为大家分享了Android实现弹幕效果的具体代码,供大家参考,具体内容如下
首先分析一下,他是由三层布局来共同完成的,第一层视频布局,第二层字幕布局,第三层输入框布局,要想让这三个布局在同一页面上,必须用相对布局或帧布局。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/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"> <VideoView android:id="@+id/video_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" /> <master.flame.danmaku.ui.widget.DanmakuView android:id="@+id/danmaku_view" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout 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" > <EditText android:id="@+id/edit_text" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" /> <Button android:id="@+id/send" android:text="send" android:layout_width="wrap_content" android:layout_height="match_parent" /> </LinearLayout> </RelativeLayout>
创建一个弹幕的解析器
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); } }
最后使页面横屏展示:
<activity android:name=".MainActivity" 只需要加这一行代码就可以 android:screenOrientation="landscape" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍简单实现jQuery弹幕效果,包括了简单实现jQuery弹幕效果的使用技巧和注意事项,需要的朋友参考一下 在要写一个弹幕案例的时候,首先要清楚每一步要干什么。 首先搭好框架之后在要发送弹幕时应该准备进行如下步骤: 获取到要发送到弹幕上的内容,即获取到文本框输入的内容。通过jquery的var str = $(“#文本框的id”).val(); 生成一个元素:利用jQuery的 var
本文向大家介绍jQuery实现简单弹幕效果,包括了jQuery实现简单弹幕效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了jQuery实现弹幕效果的具体代码,供大家参考,具体内容如下 话不多说吧,直接看效果吧: 主要思路 其实弹幕的主要思路很简单,就是将div从右向左移动,直到完全移除屏幕之后,将当前div从body中移除,这里我采用了面向对象的思想来处理,具体js代码如下: J
本文向大家介绍简单实现Android弹出菜单效果,包括了简单实现Android弹出菜单效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android弹出菜单效果的具体代码,供大家参考,具体内容如下 功能描述:用户单击按钮弹出菜单。当用户选择一个菜单项,会触发MenuItemClick事件并让弹出的菜单消失;如果用户在菜单外单击,则直接消失弹出的菜单。当菜单消失时,会引发Dismi
本文向大家介绍jQuery实现弹幕效果,包括了jQuery实现弹幕效果的使用技巧和注意事项,需要的朋友参考一下 效果如下: 代码如下: 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!
本文向大家介绍简单实现jQuery弹窗效果,包括了简单实现jQuery弹窗效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了jQuery弹窗效果展示的具体代码,供大家参考,具体内容如下 用到的点: jQuery创建:$('<div>'); 弹窗的位置: 当滚动条滚动时候,弹窗的位置变化: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍Android EasyBarrage实现轻量级弹幕效果,包括了Android EasyBarrage实现轻量级弹幕效果的使用技巧和注意事项,需要的朋友参考一下 本文介绍了Android EasyBarrage实现轻量级弹幕效果,分享给大家,具体如下: 概述 EasyBarrage是Android平台的一种轻量级弹幕效果目前支持以下设置: 自定义字体颜色,支持随机颜色; 自定义字体大