Skip to content

Commit

Permalink
修复View大小改变后没有重新计算轨道的问题
Browse files Browse the repository at this point in the history
  • Loading branch information
lh123 committed Oct 3, 2016
1 parent 958308b commit b57b7ea
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 26 deletions.
2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion DanmakuLibrary/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@ dependencies {
})
testCompile 'junit:junit:4.12'
compile 'com.android.support:support-annotations:24.2.1'
}
}
3 changes: 1 addition & 2 deletions DanmakuLibrary/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@

<application android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true"
>
android:supportsRtl="true">

</application>

Expand Down
61 changes: 41 additions & 20 deletions DanmakuLibrary/src/main/java/com/lh/danmakulibrary/DanmakuView.java
Original file line number Diff line number Diff line change
Expand Up @@ -227,30 +227,49 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
mScreenWidth = getMeasuredWidth();
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mScreenWidth = w;
mScreenHeight = h;
int preState = mDanmakuState;
pause();
clearAllDanamku();
measureTrack();
if (preState == PLAYING) {
resume();
}
}

private void measureTrack() {
mDanmakuTracks.clear();
TextPaint measureTextPaint = new TextPaint();
measureTextPaint.setAntiAlias(true);
measureTextPaint.setFakeBoldText(true);
measureTextPaint.setTextSize(dip2px(MAX_TEXT_SIZE) * mScaleTextRatio);
TextPaint.FontMetrics fontMetrics = measureTextPaint.getFontMetrics();
mPeerTrackHeight = fontMetrics.bottom - fontMetrics.top;
float trackTotalHeight = 0;
int currentTrackCount = 0;
while (trackTotalHeight + mPeerTrackHeight < mScreenHeight && currentTrackCount < mMaxDanmakuTrackCount) {
trackTotalHeight += mPeerTrackHeight;
currentTrackCount++;
}
mTrackMargin = (mScreenHeight - trackTotalHeight) / (currentTrackCount * 2);
float currentY = mTrackMargin;
for (int i = 0; i < currentTrackCount; i++) {
DanmakuTrack track = new DanmakuTrack();
track.y = currentY;
mDanmakuTracks.add(track);
currentY += (mPeerTrackHeight + 2 * mTrackMargin);
}
}

//准备弹幕轨道
private void prepareDanmakuTrack() {
if (mDanmakuState == IDLE) {
mDanmakuState = PREPARED;
TextPaint measureTextPaint = new TextPaint();
measureTextPaint.setAntiAlias(true);
measureTextPaint.setFakeBoldText(true);
measureTextPaint.setTextSize(dip2px(MAX_TEXT_SIZE) * mScaleTextRatio);
TextPaint.FontMetrics fontMetrics = measureTextPaint.getFontMetrics();
mPeerTrackHeight = fontMetrics.bottom - fontMetrics.top;
float trackTotalHeight = 0;
int currentTrackCount = 0;
while (trackTotalHeight + mPeerTrackHeight < mScreenHeight && currentTrackCount < mMaxDanmakuTrackCount) {
trackTotalHeight += mPeerTrackHeight;
currentTrackCount++;
}
mTrackMargin = (mScreenHeight - trackTotalHeight) / (currentTrackCount * 2);
float currentY = mTrackMargin;
for (int i = 0; i < currentTrackCount; i++) {
DanmakuTrack track = new DanmakuTrack();
track.y = currentY;
mDanmakuTracks.add(track);
currentY += (mPeerTrackHeight + 2 * mTrackMargin);
}
measureTrack();
}
}

Expand Down Expand Up @@ -490,6 +509,7 @@ private DanmakuWrapped findLastScrollDanmaku() {
return lastDanmaku;
}

@SuppressWarnings("RedundantIfStatement")
private boolean canAddScrollDanmaku() {
DanmakuWrapped lastScrollDanmaku = findLastScrollDanmaku();
if (lastScrollDanmaku == null || lastScrollDanmaku.isDisAppear()) {
Expand All @@ -504,6 +524,7 @@ private boolean canAddScrollDanmaku() {
}


@SuppressWarnings("RedundantIfStatement")
private boolean canAddScrollDanmakuAvoidOverLapping(DanmakuWrapped addDanmaku) {
DanmakuWrapped lastScrollDanmaku = findLastScrollDanmaku();
if (lastScrollDanmaku == null || lastScrollDanmaku.isDisAppear()) {
Expand Down
2 changes: 0 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,10 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
jcenter()
Expand Down

0 comments on commit b57b7ea

Please sign in to comment.