中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中怎么實現彈幕效果

發布時間:2021-08-11 13:57:13 來源:億速云 閱讀:151 作者:Leah 欄目:編程語言

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>

看完上述內容,你們掌握Android中怎么實現彈幕效果的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

拜泉县| 深圳市| 积石山| 乌拉特中旗| 镇沅| 怀仁县| 巍山| 七台河市| 富锦市| 霍城县| 潢川县| 沽源县| 八宿县| 双鸭山市| 赤水市| 和静县| 新巴尔虎右旗| 壤塘县| 房山区| 拉孜县| 汉中市| 磴口县| 涿鹿县| 高尔夫| 镇安县| 定日县| 南岸区| 霞浦县| 吉林市| 衢州市| 江华| 万宁市| 宜州市| 屏南县| 磴口县| 甘肃省| 商南县| 安陆市| 北辰区| 常熟市| 靖远县|