怎么在Android中实现弹幕效果

怎么在Android中实现弹幕效果?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都做网站、网站设计、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的东港网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

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



 
  
  
  
    
    

创建一个弹幕的解析器

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是什么

Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


本文标题:怎么在Android中实现弹幕效果
当前地址:http://scyanting.com/article/gssies.html