آموزش crop (برش) فیلم در برنامه نویسی اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش crop (برش) فیلم در برنامه نویسی اندروید می پردازیم قبلتر آموزش crop عکس را در سایت قرار داده بودیم و امروز در صدد برآمدیم تا آموزش برش فیلم را نیز قرار دهیم در ادامه با ما همراه باشید.
برای اینکه یک فیلم را برش دهیم نیاز داریم تا minsdk برابر با 14 یا بالاتر باشد. سپس یک ویدیو با فرمت mp4 در پوشه assets قرار دهید قبلا نحوه ایجاد پوشه assets را قرار داده بودیم می توانید از لینک زیر استفاده کنید.
آموزش ایجاد پوشه assets در برنامه نویسی اندروید
در فایل layout خود کد های زیر را قرار دهید در اینجا نام آن برابر با activity_main.xml است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/rootView"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="Actual Video Size" android:textSize="18pt" android:background="@android:color/darker_gray"/> <TextureView android:id="@+id/textureView" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </FrameLayout> |
سپس در بخش MainActivity.java کد های زیر را قرار می دهیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | package ir.programchi; import android.app.Activity; import android.content.res.AssetFileDescriptor; import android.graphics.Matrix; import android.graphics.SurfaceTexture; import android.media.MediaMetadataRetriever; import android.media.MediaPlayer; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.Surface; import android.view.TextureView; import android.view.View; import android.widget.FrameLayout; import java.io.IOException; public class MainActivity extends Activity implements TextureView.SurfaceTextureListener { private static final String TAG = MainActivity.class.getName(); private static final String FILE_NAME = "kids.mp4"; private MediaPlayer mMediaPlayer; private TextureView mTextureView; private float mVideoWidth; private float mVideoHeight; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); calculateVideoSize(); initView(); } private void calculateVideoSize() { try { AssetFileDescriptor afd = getAssets().openFd(FILE_NAME); MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever(); metaRetriever.setDataSource( afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); String height = metaRetriever .extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); String width = metaRetriever .extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH); mVideoHeight = Float.parseFloat(height); mVideoWidth = Float.parseFloat(width); } catch (IOException e) { Log.d(TAG, e.getMessage()); } catch (NumberFormatException e) { Log.d(TAG, e.getMessage()); } } private void initView() { mTextureView = (TextureView) findViewById(R.id.textureView); mTextureView.setSurfaceTextureListener(this); FrameLayout rootView = (FrameLayout) findViewById(R.id.rootView); rootView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_UP: updateTextureViewSize((int) motionEvent.getX(), (int) motionEvent.getY()); break; } return true; } }); } 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); } 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)); } @Override protected void onDestroy() { super.onDestroy(); if (mMediaPlayer != null) { mMediaPlayer.stop(); mMediaPlayer.release(); mMediaPlayer = null; } } @Override public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i2) { Surface surface = new Surface(surfaceTexture); try { AssetFileDescriptor afd = getAssets().openFd(FILE_NAME); mMediaPlayer = new MediaPlayer(); mMediaPlayer .setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); mMediaPlayer.setSurface(surface); mMediaPlayer.setLooping(true); mMediaPlayer.prepareAsync(); mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { mediaPlayer.start(); } }); } catch (IllegalArgumentException e) { Log.d(TAG, e.getMessage()); } catch (SecurityException e) { Log.d(TAG, e.getMessage()); } catch (IllegalStateException e) { Log.d(TAG, e.getMessage()); } catch (IOException e) { Log.d(TAG, e.getMessage()); } } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i2) { } @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) { return true; } @Override public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) { } } |
در بالا نام فایل ما که در پوشه assets است برابر با kids است شما باید آن را تغییر دهید سپس با استفاده از ویژگی onTouch بررسی می کنیم که کاربر چگونه می خواهد اندازه ویدیو را تغییر دهد و اندازه اولیه و اندازه بعد از crop شدن در یک Texture قرار خواهد گرفت برنامه را تست کنید تا با بقه قابلیت ها آشنا شوید.
این آموزش هم به پایان رسید.
موفق و موید باشید.