学Android也有一个多月了,发现弹幕效果很好玩。自己在网上看了一些别人的例子,然后自己动手写了一个,下面写出来分享一下我整个实现的思路。
实现的效果:
实现的思路:
1、自定义一个TextView,用来显示弹幕。
2、这个TextView可以从右到左移动。
3、弹幕文字颜色随机。
4、弹幕显示的高度(y轴坐标)随机,显示的区域在屏幕的范围内。
5、(可选)如果显示的弹幕数量不足X时候,弹幕主要是显示在屏幕上方。
详细的实现过程:
1、首先先把屏幕设置为横排,去掉标题,全屏打开。为了看的效果更佳,我把背景修改为黑色
<activity android:name=".MainActivity"
android:screenOrientation="landscape"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
对应的styles.xml文件如下:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowBackground">@color/black</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowNoTitle">true</item>
</style>
2、获取弹幕数据
新建一个类专门来获取弹幕数据,我把数据放在assets文件夹下,所以只写了一个获取assets文件的方法,后面还可以加入读取数据库等方法。
public class ReaderBarrage {
private Context context;
public ReaderBarrage(Context context){
this.context = context;
}
//读取assets文件夹数据
public Vector<String> readerAssetsFolder(String foldername){
try {
InputStream in = context.getAssets().open(foldername);
InputStreamReader isr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);
String line = "";
final Vector<String> data = new Vector<String>();
while ( (line = br.readLine()) != null){
data.add(line);
}
br.close();
isr.close();
in.close();
return data;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
3、自定义一个TextView,用来放字幕。
重写该类的onDraw()方法,在该方法内绘制弹幕
/**
* 用来显示弹幕的View
*/
public class MyBarrageView extends