Cropping Video In Android

crop_video

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 😉

Advertisements

مقداردهی خصیصه های html در ember.js

مشکل از اینجا شروع می شه که می خواین تو ember یه خصیصه ی html رو به صورت داینامیک مقدار دهی کنید ، فکر کنید تکه کد زیر رو داخل قالب ember دارین :

خب حالا می خوایم متغیر myDynamicValue رو به عنوان خصیصه ی placeholder به textarea بدیم ، شاید فکر کنید تکه کد زیر همین کار رو انجام می ده :
<textarea placeholder="{{myDynamicValue}}”>
اما کاملا در اشتباهید با تکه کد زیر می توانید این کار رو انجام بدید:
{{bindAttr <>=”<>”}}
به عنوان مثال:
به همین راحتی !!!!!!!!!!!

اکشن بار بر روی اندروید 2.1 به بالا (Action Bar)

اگه برای اپلیکیشن تون می خواین اکشن بار بزارین و کاربراتون از نسخه 3 به بالا استفاده می کنن با خواندن مطلب پایین در ۳ ثانیه می توانید این کارو انجام بدید.

اگه دارین این رو می خوانین یعنی باسه کاربراتون ارزش قائلید و از نسخه های 2.1 به بالا می خواین پشتیبانی کنید ، آستیناتون رو بدین بالا که یه ذره کار سخته 😀 . اگه دارین از Eclipse استفاده می کنید با جاش این صفحه رو ببندین و بعد از اینکه پروژه تون رو بردین رو IntelliJ IDEA یا Android Studio ادامه مطلب رو بخوانین.
  1. اول از همه باید Android Support Library  رو از Android sdk manager  نصب کنید

  2.  در Intellij Idea به مسیر زیر برید:
File -> Project Structure …
  3. در قسمت Libraries دو فایل jar (داخل اندروید SDK) زیر را اضافه کنید
Sdk Path/extras/android/support/v7/appcompat/lib/android-support-v4.jar
Sdk Path/extras/android/support/v7/appcompat/lib/android-support-v7-appcompat.jar


  4.  در قسمت Modules ، ماژول appcompat را از مسیر زیر ایمپورت کنید و در تب Dependencies دو تا فایل jar ی که در مرحله قبل اضافه کردید رو اینجا هم اضافه کنید مثل عکس زیر

Sdk Path/extras/android/support/v7/appcompat

  5.  تا اینجای کار android-support-v7 رو به پروژه اضافه کردید حالا مانده ازش استفاده کنیم ، داخل فایل AndroidManifest.xml به تگ Activity (اکتیویتیه اصلیه پروژه و یا هر جایی که می خواین اکشن بار بزارین) تکه کد زیر رو وارد کنید
android:theme=”@style/Theme.AppCompat.Light”

  فایل AndroidManifest.xml پروژه من :
 6. کلاس اکتیویتی که می خواین اکشن بار داشته باشه رو باز کنید و از کلاس ActionBarActivity ارث ببرید !! (extend کنید)
تمووم شد آورین ، برای اینکه با نحوه کار اشکن بار آشنا بشین مطلب زیر رو بخونید