Android中怎么實(shí)現(xiàn)彈幕效果,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
我們提供的服務(wù)有:成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、石樓ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的石樓網(wǎng)站制作公司
成都創(chuàng)新互聯(lián)公司2013年成立,先為臨朐等服務(wù)建站,臨朐等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為臨朐企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
首先分析一下,他是由三層布局來共同完成的,第一層視頻布局,第二層字幕布局,第三層輸入框布局,要想讓這三個(gè)布局在同一頁面上,必須用相對(duì)布局或幀布局。
創(chuàng)建一個(gè)彈幕的解析器
public class MainActivity extends AppCompatActivity { private boolean showDanmaku; private DanmakuView danmakuView; private DanmakuContext danmakuContext; //創(chuàng)建一個(gè)彈幕的解析器 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); //調(diào)用了enableDanmakuDrawingCache()方法來提升繪制效率,也就是繪制速度 // 又調(diào)用了setCallback()方法來設(shè)置回調(diào)函數(shù)。 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(); //第一個(gè)參數(shù)是彈幕的解析器 //調(diào)用DanmakuView的prepare()方法來進(jìn)行準(zhǔn)備,準(zhǔn)備完成后會(huì)自動(dòng)調(diào)用剛才設(shè)置的回調(diào)函數(shù)中的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); } }
最后使頁面橫屏展示:
看完上述內(nèi)容,你們掌握Android中怎么實(shí)現(xiàn)彈幕效果的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!