Cha*_*kar 5 android textureview
我在纹理视图中重复播放视频,其目的是显示背景视频。我需要将纹理视图的宽度和高度设置为 match_parent。
我想缩放视频,使其看起来在播放它的纹理视图上被裁剪。
我按照这个链接TextureView缩放并使用了给定的函数。
private void updateTextureViewSize(int viewWidth, int viewHeight) {
float scaleX = 1.0f;
float scaleY = 1.0f;
if (mVideoWidth > viewWidth && mVideoHeight > viewHeight) {
scaleX = mVideoWidth / viewWidth;
scaleY = mVideoHeight / viewHeight;
} else if (mVideoWidth < viewWidth && mVideoHeight < viewHeight) {
scaleY = viewWidth / mVideoWidth;
scaleX = viewHeight / mVideoHeight;
} else if (viewWidth > mVideoWidth) {
scaleY = (viewWidth / mVideoWidth) / (viewHeight / mVideoHeight);
} else if (viewHeight > mVideoHeight) {
scaleX = (viewHeight / mVideoHeight) / (viewWidth / mVideoWidth);
}
// Calculate pivot points, in our case crop from center
int pivotPointX = viewWidth / 2;
int pivotPointY = viewHeight / 2;
Matrix matrix = new Matrix();
matrix.setScale(scaleX, scaleY, pivotPointX, pivotPointY);
mTextureView.setTransform(matrix);
mTextureView.setLayoutParams(new FrameLayout.LayoutParams(viewWidth, viewHeight));
}
Run Code Online (Sandbox Code Playgroud)
我将 mVideoWidth 和 mVideoHeight 检索为 mediaPlayer.getVideoWidth() 和 mediaPlayer.getVideoHeight()。我不明白的是我应该传入什么作为函数参数 viewWidth 和 viewHeight ?我尝试传递父容器的宽度和高度,但这导致应用程序崩溃。
这是父级的 xml 代码
<FrameLayout
android:id="@+id/fl_profile_video_container"
android:layout_width="match_parent"
android:layout_height="300dp">
<!--<VideoView-->
<!--android:id="@+id/vv_profile_video"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="match_parent" />-->
<TextureView
android:id="@+id/profile_video_texture_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"/>
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/profile_video_overlay"/>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
这是视频播放部分的代码。
FrameLayout profileVideoContainer = (FrameLayout) view.findViewById(R.id.fl_profile_video_container);
profileVideoTextureView = (TextureView) view.findViewById(R.id.profile_video_texture_view);
SharedPreferences sharedPrefs = getApplicationContext().getSharedPreferences(ProfileVideoRecordingActivity.TAG_VIDEO_PROFILE, Context.MODE_PRIVATE);
final String profileVideoPath = sharedPrefs.getString(ProfileVideoRecordingActivity.VIDEO_PROFILE_PATH, null);
if(profileVideoPath != null && (new File(profileVideoPath)).exists()){
profileVideoContainer.setVisibility(View.VISIBLE);
profileVideoTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1) {
Surface surface = new Surface(surfaceTexture);
try {
profileVidMediaPlayer = new MediaPlayer();
profileVidMediaPlayer.setDataSource(mActivity, Uri.parse(profileVideoPath));
profileVidMediaPlayer.setSurface(surface);
profileVidMediaPlayer.prepareAsync();
profileVidMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
profileVidMediaPlayer.start();
profileVidMediaPlayer.setLooping(true);
}
});
}catch(IOException e){
Log.e("DEBUG", "IOException", e);
}
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i1) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
return true;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
}
});
}else{
profileVideoContainer.setVisibility(View.GONE);
}
Run Code Online (Sandbox Code Playgroud)
如何缩放视频,使其看起来像 ImageView 上的属性一样居中裁剪?
我尝试使用https://www.binpress.com/video-cropping-with-texture-view/上描述的相同缩放方法,但它无法正确缩放。
我找到了另一个如何缩放TextureView视频的示例,它对我有用: https: //github.com/yqritc/Android-ScalableVideoView/blob/master/library/src/main/java/com/yqritc/scalablevideoview/ScaleManager。爪哇。
| 归档时间: |
|
| 查看次数: |
2736 次 |
| 最近记录: |