Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
12 changed files
with
673 additions
and
442 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
104 changes: 104 additions & 0 deletions
104
nicevideoplayer/src/main/java/com/xiao/nicevideoplayer/NiceTextureView.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
package com.xiao.nicevideoplayer; | ||
|
||
import android.content.Context; | ||
import android.view.TextureView; | ||
|
||
/** | ||
* Created by XiaoJianjun on 2017/6/21. | ||
* 重写TextureView, | ||
*/ | ||
public class NiceTextureView extends TextureView { | ||
|
||
private int videoHeight; | ||
private int videoWidth; | ||
|
||
public NiceTextureView(Context context) { | ||
super(context); | ||
} | ||
|
||
public void resetVideoSize(int videoWidth, int videoHeight) { | ||
if (this.videoWidth != videoWidth && this.videoHeight != videoHeight) { | ||
this.videoWidth = videoWidth; | ||
this.videoHeight = videoHeight; | ||
requestLayout(); | ||
} | ||
} | ||
|
||
@Override | ||
public void setRotation(float rotation) { | ||
if (rotation != getRotation()) { | ||
super.setRotation(rotation); | ||
requestLayout(); | ||
} | ||
} | ||
|
||
@Override | ||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { | ||
|
||
float viewRotation = getRotation(); | ||
|
||
// 如果判断成立,则说明显示的TextureView和本身的位置是有90度的旋转的,所以需要交换宽高参数。 | ||
if (viewRotation == 90 || viewRotation == 270) { | ||
int tempMeasureSpec = widthMeasureSpec; | ||
widthMeasureSpec = heightMeasureSpec; | ||
heightMeasureSpec = tempMeasureSpec; | ||
} | ||
|
||
int width = getDefaultSize(videoWidth, widthMeasureSpec); | ||
int height = getDefaultSize(videoHeight, heightMeasureSpec); | ||
if (videoWidth > 0 && videoHeight > 0) { | ||
|
||
int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec); | ||
int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec); | ||
int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec); | ||
int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec); | ||
|
||
if (widthSpecMode == MeasureSpec.EXACTLY && heightSpecMode == MeasureSpec.EXACTLY) { | ||
// the size is fixed | ||
width = widthSpecSize; | ||
height = heightSpecSize; | ||
// for compatibility, we adjust size based on aspect ratio | ||
if (videoWidth * height < width * videoHeight) { | ||
width = height * videoWidth / videoHeight; | ||
} else if (videoWidth * height > width * videoHeight) { | ||
height = width * videoHeight / videoWidth; | ||
} | ||
} else if (widthSpecMode == MeasureSpec.EXACTLY) { | ||
// only the width is fixed, adjust the height to match aspect ratio if possible | ||
width = widthSpecSize; | ||
height = width * videoHeight / videoWidth; | ||
if (heightSpecMode == MeasureSpec.AT_MOST && height > heightSpecSize) { | ||
// couldn't match aspect ratio within the constraints | ||
height = heightSpecSize; | ||
width = height * videoWidth / videoHeight; | ||
} | ||
} else if (heightSpecMode == MeasureSpec.EXACTLY) { | ||
// only the height is fixed, adjust the width to match aspect ratio if possible | ||
height = heightSpecSize; | ||
width = height * videoWidth / videoHeight; | ||
if (widthSpecMode == MeasureSpec.AT_MOST && width > widthSpecSize) { | ||
// couldn't match aspect ratio within the constraints | ||
width = widthSpecSize; | ||
height = width * videoHeight / videoWidth; | ||
} | ||
} else { | ||
// neither the width nor the height are fixed, try to use actual video size | ||
width = videoWidth; | ||
height = videoHeight; | ||
if (heightSpecMode == MeasureSpec.AT_MOST && height > heightSpecSize) { | ||
// too tall, decrease both width and height | ||
height = heightSpecSize; | ||
width = height * videoWidth / videoHeight; | ||
} | ||
if (widthSpecMode == MeasureSpec.AT_MOST && width > widthSpecSize) { | ||
// too wide, decrease both width and height | ||
width = widthSpecSize; | ||
height = width * videoHeight / videoWidth; | ||
} | ||
} | ||
} else { | ||
// no size yet, just adopt the given spec sizes | ||
} | ||
setMeasuredDimension(width, height); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.