RecyclerView實現的彈幕之中文DOC

奏響曲發表於2017-12-27

簡介

彈幕動畫通過重寫RecyclerView的預設動畫"DefaultItemAnimator"來實現,更改預設動畫過後的檔案地址在DmItemAnimator,裡面的作用我簡單的註釋了一下。

Github地址:https://github.com/xujiaji/DMView 如有使用過程中出現bug歡迎私信! 英語不好,英文文件有些地方讓人不好理解,也歡迎糾正。

DMView

dmlib類庫可以幫助你只需要簡單的幾步就可以新增展示彈幕,本類庫由RecyclerView為基礎完成,使用Glide載入頭像。

版本

2.0.0

演示

彈幕GIF演示
#安裝 將類庫新增到您的專案中,只需要在您的專案buil.gradle檔案中的dependency{}中新增如下資訊:

dependencies {compile 'com.github.xujiaji:dmlib:1.1.1'}
複製程式碼

#使用(總共四步哦!)

1. 需要在佈局中新增RecyclerView(因為以RecyclerView為主體)

<android.support.v7.widget.RecyclerView        
  android:id="@+id/rvBarrage"       
  android:layout_width="match_parent"        
  android:layout_height="match_parent"        
  android:layout_marginTop="90dp"        
  android:layout_marginBottom="90dp"        
  android:overScrollMode="never" />
複製程式碼

2.初始化 "DanMu" 在獲取了RecyclerView之後

①初始化-方法一 : 使用“dmlib”預設的佈局和行數
rvBarrage = (RecyclerView) findViewById(R.id.rvBarrage);
DanMu.init(rvBarrage);
複製程式碼
②初始化-方法二: 配置您想要的佈局
Config config = new Config(
        R.layout.item,
        R.id.tvName,
        R.id.tvMsg,
        R.id.imgHead);
        config.setRowNum(5);//設定您要設定的行數
        DanMu.init(rvBarrage, config);
複製程式碼
  • 這是上面的執行結果,程式碼請轉到sample專案。

    自定義的佈局

  • 備註: 如果您不想要其中一個佈局,比如說您不需要名字,那麼對應設定成0。

       Config config = new Config( 
       R.layout.item,
        0,
        R.id.tvMsg,
        R.id.imgHead);
複製程式碼
③初始化-方法三:設定彈幕的行數
        Config config = new Config();
        config.setRowNum(3);
        DanMu.init(rvBarrage, config);
複製程式碼
④初始化-方法四:設定彈幕的展示時間
        Config config = new Config();
        config.setDuration(10000);
        DanMu.init(rvBarrage, config);
複製程式碼

3.新增一個彈幕

DanMu.call()        
       .picUrl("https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=150237755,4294706681&fm=116&gp=0.jpg") 
       .name("xujiaji") 
       .msg("Bullet screen massage show ...")
       .show();
複製程式碼
  • 注意: 如果您使用的是預設佈局,那麼您也可以通過以下方式展示不同的效果。

No.1

DanMu.call()        
        .picUrl("https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=150237755,4294706681&fm=116&gp=0.jpg")
        .msg("Bullet screen massage show ...")
        .show();
複製程式碼

頭像和訊息

No.2

DanMu.call()
        .msg("Bullet screen massage show ...")
        .show();
複製程式碼

只有訊息.png

No.3

javaDanMu.call()
        .name("xujiaji")
        .msg("Bullet screen massage show ...")
        .show();
複製程式碼

名字和訊息.png

No.4

DanMu.call()        
        .picUrl("https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=150237755,4294706681&fm=116&gp=0.jpg")
        .show();
複製程式碼

只有頭像

3. 銷燬彈幕

    @Override
    protected void onDestroy() {
        DanMu.destroy();
        super.onDestroy();
    }
複製程式碼

Activity中所有的程式碼

public class MainActivity extends AppCompatActivity {
    private RecyclerView rvBarrage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rvBarrage = (RecyclerView) findViewById(R.id.rvBarrage);
        //sample.1: default init
        DanMu.init(rvBarrage);

        //sample.2: config yourself layout
//        Config config = new Config(
//                R.layout.item,
//                R.id.tvName,
//                R.id.tvMsg,
//                R.id.imgHead);
//        config.setRowNum(5);  // setting bullet screen's rows
//        DanMu.init(rvBarrage, config);

        //sample.3: setting bullet screen's rows
//        Config config = new Config();
//        config.setRowNum(3);
//        DanMu.init(rvBarrage, config);

        //sample.4 setting bullet screen's animator duration
//        Config config = new Config();
//        config.setDuration(10000);
//        DanMu.init(rvBarrage, config);
    }

    public void onAddClick(View view) {
        DanMu.call()
                .picUrl("https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=150237755,4294706681&fm=116&gp=0.jpg")
                .name("xujiaji")
                .msg("Bullet screen massage show ...")
                .show();
    }

    @Override
    protected void onDestroy() {
        DanMu.destroy();
        super.onDestroy();
    }
}
複製程式碼

#“dmlib”更新日誌 ###v2.0.0 更改了動畫庫,原先是從github上面的一個RecyclerView動畫類庫裡面拉下來的幾個檔案,如今已經刪掉。現在的實現介紹在:本文頂部簡介。 新增了設定動畫展示時間的功能。 現在可以銷燬動畫。 ###v1.1.1 進行了大面積的更改。 修改優化了新增彈屏的模式,並且可以新增自定義佈局。 可以設定RecyclerView行數,預設為6行。 ###v1.0.0 第一版本,僅僅實現了傳送彈幕的功能

#License Copyright 2016 xujiaji Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
複製程式碼

相關文章