Hey guyz, First of all to cropping video we need to use TextureView
and this component available from android API 14.
Step 1: Create activity/fragment layout
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextureView android:id="@+id/textureView" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout>
Step 2: Add video file
If you want to add video to your project you should add it to /res/raw
directory
Step 3: Add below code to activity/fragment
... public static final int MY_VIDEO_WIDTH = 1920; public static final int MY_VIDEO_HEIGHT = 1080; // I'm using ButterKnife binding my views you can use findViewById instead @BindView(R.id.textureView) TextureView textureView; MediaPlayer mediaPlayer; ... @Override public void onStart() { super.onStart(); textureView.setSurfaceTextureListener(this); } @Override public void onStop() { super.onStop(); if (mediaPlayer != null) { mediaPlayer.release(); mediaPlayer = null; } } @Override public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1) { Surface surface = new Surface(surfaceTexture); scaleToCropCenter(MY_VIDEO_WIDTH, MY_VIDEO_HEIGHT, this.textureView.getWidth(), this.textureView.getHeight()); try { mediaPlayer = MediaPlayer.create(getActivity(), R.raw.video); mediaPlayer.setSurface(surface); mediaPlayer.setLooping(true); mediaPlayer.start(); } catch (Exception e) { e.printStackTrace(); } } private void scaleToCropCenter(int videoWidth, int videoHeight, int viewWidth, int viewHeight) { float scaleX = 1.0f; float scaleY = 1.0f; if (videoWidth > viewWidth && videoHeight > viewHeight) { scaleX = division(videoWidth, viewWidth); scaleY = division(videoHeight, viewHeight); } else if (videoWidth < viewWidth && videoHeight < viewHeight) { scaleY = division(viewWidth , videoWidth); scaleX = division(viewHeight , videoHeight); } else if (viewWidth > videoWidth) { scaleY = division(division(viewWidth, videoWidth), division(viewHeight, videoHeight)); } else if (viewHeight > videoHeight) { scaleX = division(division(videoWidth, viewWidth), division(viewHeight, videoHeight)); } int pivotPointX = viewWidth / 2; int pivotPointY = viewHeight / 2; Matrix matrix = new Matrix(); matrix.setScale(scaleX, scaleY, pivotPointX, pivotPointY); textureView.setTransform(matrix); textureView.setLayoutParams(new FrameLayout.LayoutParams(viewWidth, viewHeight)); } private float division(float value1, float value2) { if (value1 > value2) return value1 / value2; else return value2 / value1; } ...
That’s it 😉