diff --git a/ReleaseNotes/release-notes-3.2.0.md b/ReleaseNotes/release-notes-3.2.0.md
new file mode 100644
index 0000000..423ec7d
--- /dev/null
+++ b/ReleaseNotes/release-notes-3.2.0.md
@@ -0,0 +1,39 @@
+# PLDroidShortVideo Release Notes for 3.2.0
+
+### 简介
+
+PLDroidShortVideo 是七牛推出的一款适用于 Android 平台的短视频 SDK,提供了包括美颜、滤镜、水印、断点录制、分段回删、视频编辑、混音特效、本地/云端存储在内的多种功能,支持高度定制以及二次开发。
+
+### 版本
+
+* 发布 pldroid-shortvideo-3.2.0.jar
+* 更新 libpldroid\_shortvideo_core.so
+
+### 功能
+
+* 图片合成新增预览及多个转场功能
+* 新增屏幕录制帧率设置
+* 视频拼接功能支持缩放模式设置
+
+### 缺陷
+* 修复快速剪辑后的视频文件信息异常的问题
+* 修复在某些机型上会偶现混音卡住的问题
+* 修复转码偶现的空指针异常的问题
+* 修复某些机型极慢速录制时偶现的花屏问题
+
+### 注意事项
+
+* 从 v3.1.0 版本开始,需要在 Application 中初始化 sdk:
+
+```java
+PLShortVideoEnv.init(getApplicationContext());
+```
+
+* 七牛短视频 SDK 自 v3.0.0 版本起, 划分为精简版、基础版、进阶版、专业版。不同版本 SDK 可以使用的功能点数量有差别,请按照购买的 License 版本使用对应的短视频 SDK 版本。
+* 上传 SDK 的依赖需要更新到如下版本:
+
+```java
+compile 'com.qiniu:qiniu-android-sdk:7.6.4'
+```
+
+
diff --git a/ShortVideoFunctionDemo/app/build.gradle b/ShortVideoFunctionDemo/app/build.gradle
index 05e93f0..9c9c4c0 100644
--- a/ShortVideoFunctionDemo/app/build.gradle
+++ b/ShortVideoFunctionDemo/app/build.gradle
@@ -14,8 +14,8 @@ android {
applicationId "com.qiniu.pili.droid.shortvideo.demo"
minSdkVersion 18
targetSdkVersion 26
- versionCode 29
- versionName "3.1.1"
+ versionCode 31
+ versionName "3.2.0"
multiDexEnabled true
vectorDrawables.useSupportLibrary = true
buildConfigField "long", "BUILD_TIMESTAMP", System.currentTimeMillis() + "L"
@@ -29,23 +29,37 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
+ lintOptions {
+ abortOnError false
+ }
}
dependencies {
- implementation 'com.qiniu:qiniu-android-sdk:7.3.11'
- implementation files('libs/pldroid-shortvideo-3.1.1.jar')
+ // 上传 sdk ,不使用上传功能无需依赖
+ implementation 'com.qiniu:qiniu-android-sdk:7.6.4'
+ // 播放器 sdk ,非必须
implementation files('libs/pldroid-player-2.1.8.jar')
+ // 如果接入 EasyAR 则需要依赖
implementation files('libs/EasyAR.jar')
implementation files('libs/EasyAR3D.jar')
-
- implementation 'com.android.support:multidex:1.0.3'
+ // UI 控件库,非必须
+ implementation 'androidx.multidex:multidex:2.0.1'
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.7'
- implementation 'com.android.support:recyclerview-v7:28.0.0'
- implementation 'com.android.support:appcompat-v7:28.0.0'
- implementation 'com.android.support:design:28.0.0'
- implementation 'com.android.support.constraint:constraint-layout:1.1.3'
-
- implementation files('libs/universal-image-loader-1.9.4.jar')
+ implementation 'androidx.recyclerview:recyclerview:1.1.0'
+ implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'com.google.android.material:material:1.2.1'
+ implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
implementation 'com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:0.10.6'
+ // 图片加载库,非必须
+ implementation files('libs/universal-image-loader-1.9.4.jar')
implementation 'com.github.bumptech.glide:glide:4.9.0'
-}
\ No newline at end of file
+ // 为了规避单个 DEX 64K 方法数上限,非必须
+ implementation 'androidx.multidex:multidex:2.0.1'
+
+ if (buildWithShortVideoLibrary) {
+ implementation project(':library')
+ } else {
+ // 短视频 SDK jar 包,必须依赖
+ implementation files('libs/pldroid-shortvideo-3.2.0.jar')
+ }
+}
diff --git a/ShortVideoFunctionDemo/app/libs/pldroid-shortvideo-3.1.1.jar b/ShortVideoFunctionDemo/app/libs/pldroid-shortvideo-3.1.1.jar
deleted file mode 100644
index e67b1a4..0000000
Binary files a/ShortVideoFunctionDemo/app/libs/pldroid-shortvideo-3.1.1.jar and /dev/null differ
diff --git a/ShortVideoFunctionDemo/app/libs/pldroid-shortvideo-3.2.0.jar b/ShortVideoFunctionDemo/app/libs/pldroid-shortvideo-3.2.0.jar
new file mode 100644
index 0000000..6fbc63d
Binary files /dev/null and b/ShortVideoFunctionDemo/app/libs/pldroid-shortvideo-3.2.0.jar differ
diff --git a/ShortVideoFunctionDemo/app/src/main/AndroidManifest.xml b/ShortVideoFunctionDemo/app/src/main/AndroidManifest.xml
index 99b82e7..b82fbae 100644
--- a/ShortVideoFunctionDemo/app/src/main/AndroidManifest.xml
+++ b/ShortVideoFunctionDemo/app/src/main/AndroidManifest.xml
@@ -22,7 +22,7 @@
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
-
+
@@ -30,7 +30,9 @@
-
+
@@ -115,6 +117,10 @@
android:screenOrientation="portrait"
android:theme="@style/AppTheme" />
+
\ No newline at end of file
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/ShortVideoApplication.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/ShortVideoApplication.java
index 013cb1e..bce95a1 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/ShortVideoApplication.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/ShortVideoApplication.java
@@ -1,10 +1,10 @@
package com.qiniu.pili.droid.shortvideo.demo;
-import android.app.Application;
+import androidx.multidex.MultiDexApplication;
import com.qiniu.pili.droid.shortvideo.PLShortVideoEnv;
-public class ShortVideoApplication extends Application {
+public class ShortVideoApplication extends MultiDexApplication {
@Override
public void onCreate() {
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ArRecordActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ArRecordActivity.java
index cc81b2c..1226f1c 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ArRecordActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ArRecordActivity.java
@@ -3,7 +3,7 @@
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ConfigActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ConfigActivity.java
index 2a45615..72a1c4c 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ConfigActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ConfigActivity.java
@@ -1,6 +1,6 @@
package com.qiniu.pili.droid.shortvideo.demo.activity;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/DraftBoxActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/DraftBoxActivity.java
index 4d760c6..bff3786 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/DraftBoxActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/DraftBoxActivity.java
@@ -4,8 +4,8 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ExternalMediaRecordActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ExternalMediaRecordActivity.java
index 5d660b8..cc43ccf 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ExternalMediaRecordActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ExternalMediaRecordActivity.java
@@ -7,7 +7,7 @@
import android.media.MediaExtractor;
import android.media.MediaFormat;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
@@ -79,12 +79,12 @@ protected void onCreate(Bundle savedInstanceState) {
mExternalMediaRecorder.setRecordStateListener(this);
mExternalMediaRecorder.prepare(videoEncodeSetting, audioEncodeSetting, recordSetting);
- mPlayButton = (Button)findViewById(R.id.play);
- mStopButton = (Button)findViewById(R.id.stop);
+ mPlayButton = (Button) findViewById(R.id.play);
+ mStopButton = (Button) findViewById(R.id.stop);
mPlayButton.setOnClickListener(this);
mStopButton.setOnClickListener(this);
- mVideoTextureView = (PLVideoTextureView)findViewById(R.id.video);
+ mVideoTextureView = (PLVideoTextureView) findViewById(R.id.video);
mVideoTextureView.setVideoPath(SRC_VIDEO_FILE_PATH);
AVOptions options = new AVOptions();
@@ -132,7 +132,7 @@ public void onClick(View view) {
view.setEnabled(false);
switch (view.getId()) {
case R.id.play:
- if ((mVideoTextureView != null) && (!mVideoTextureView.isPlaying())) {
+ if (!mVideoTextureView.isPlaying()) {
mVideoTextureView.start();
mExternalMediaRecorder.start();
}
@@ -151,7 +151,9 @@ public void onClick(View view) {
@Override
protected void onDestroy() {
- mExternalMediaRecorder.stop();
+ if (mVideoTextureView != null && mVideoTextureView.isPlaying()) {
+ mExternalMediaRecorder.stop();
+ }
if (mVideoTextureView != null) {
mVideoTextureView.stopPlayback();
mVideoTextureView = null;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ImageComposeActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ImageComposeActivity.java
index 7b19577..a9d19c3 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ImageComposeActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ImageComposeActivity.java
@@ -5,8 +5,8 @@
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.ContextMenu;
import android.view.MenuItem;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ImageComposeWithTransitionActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ImageComposeWithTransitionActivity.java
new file mode 100644
index 0000000..035f92a
--- /dev/null
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ImageComposeWithTransitionActivity.java
@@ -0,0 +1,368 @@
+package com.qiniu.pili.droid.shortvideo.demo.activity;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.graphics.SurfaceTexture;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Environment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.TextureView;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.SeekBar;
+import android.widget.Spinner;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.Glide;
+import com.qiniu.pili.droid.shortvideo.PLComposeItem;
+import com.qiniu.pili.droid.shortvideo.PLImageComposer;
+import com.qiniu.pili.droid.shortvideo.PLPreviewListener;
+import com.qiniu.pili.droid.shortvideo.PLTransitionType;
+import com.qiniu.pili.droid.shortvideo.PLVideoEncodeSetting;
+import com.qiniu.pili.droid.shortvideo.PLVideoSaveListener;
+import com.qiniu.pili.droid.shortvideo.demo.R;
+import com.qiniu.pili.droid.shortvideo.demo.utils.GetPathFromUri;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class ImageComposeWithTransitionActivity extends AppCompatActivity {
+
+ private static final String TAG = "ImageCompose2";
+
+ private TextureView mTexturePreview;
+ private SeekBar mProgressBar;
+ private Button mBtnAddImage;
+ private Button mBtnStart;
+ private Button mBtnResume;
+ private Button mBtnPause;
+ private Button mBtnStop;
+ private Button mBtnSave;
+ private RecyclerView mRVVideo;
+ private List mImageItemList = new ArrayList<>();
+ private RecyclerView.Adapter mAdapter;
+ private Map mTransitionMap = new HashMap<>();
+ private PLImageComposer mImageComposer;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_image_compose_with_transition);
+ prepareTransitions();
+
+ mTexturePreview = (TextureView) findViewById(R.id.texture_preview);
+ mProgressBar = (SeekBar) findViewById(R.id.seek_bar);
+ mBtnAddImage = (Button) findViewById(R.id.btn_add_image);
+ mBtnStart = (Button) findViewById(R.id.btn_start);
+ mBtnResume = (Button) findViewById(R.id.btn_resume);
+ mBtnPause = (Button) findViewById(R.id.btn_pause);
+ mBtnStop = (Button) findViewById(R.id.btn_stop);
+ mBtnSave = (Button) findViewById(R.id.btn_save);
+ mRVVideo = (RecyclerView) findViewById(R.id.rv_video);
+
+ mAdapter = new RecyclerView.Adapter() {
+ @NonNull
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ return new ImageComposeWithTransitionActivity.ItemViewHolder(ImageComposeWithTransitionActivity.this);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
+ ImageComposeWithTransitionActivity.ItemViewHolder h = (ImageComposeWithTransitionActivity.ItemViewHolder) holder;
+
+ PLComposeItem item = mImageItemList.get(position);
+ Glide.with(ImageComposeWithTransitionActivity.this).load(item.getFilePath()).into(h.imageView);
+
+ if (position == mImageItemList.size() - 1) {
+ h.textView.setVisibility(View.GONE);
+ } else {
+ h.textView.setVisibility(View.VISIBLE);
+ PLTransitionType transitionType = item.getTransitionType();
+ h.textView.setText(getTransitionName(transitionType));
+ }
+ }
+
+ @Override
+ public int getItemCount() {
+ return mImageItemList.size();
+ }
+ };
+ mRVVideo.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
+ mRVVideo.setAdapter(mAdapter);
+
+ mImageComposer = new PLImageComposer(this);
+ mImageComposer.setPreviewLoop(true);
+ mImageComposer.setPreviewListener(new PLPreviewListener() {
+ @Override
+ public void onProgress(float progress) {
+ mProgressBar.setProgress((int) (progress * 10000));
+ }
+
+ @Override
+ public void onCompleted() {
+ Toast.makeText(ImageComposeWithTransitionActivity.this, "播放完成", Toast.LENGTH_SHORT).show();
+ }
+ });
+
+ mProgressBar.setMax(10000);
+ mProgressBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+ if (fromUser) {
+ float delta = progress / 10000f;
+ if (mImageComposer.getDurationMs() != 0) {
+ long seekTime = (long) (mImageComposer.getDurationMs() * delta);
+ mImageComposer.seekPreview(seekTime);
+ }
+ }
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {
+ }
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {
+ }
+ });
+
+ setupAction();
+ }
+
+ private void prepareTransitions() {
+ mTransitionMap.put("淡入淡出", PLTransitionType.FADE);
+ mTransitionMap.put("从左飞入", PLTransitionType.SLIDE_IN_FROM_LEFT);
+ mTransitionMap.put("从上飞入", PLTransitionType.SLIDE_IN_FROM_TOP);
+ mTransitionMap.put("从右飞入", PLTransitionType.SLIDE_IN_FROM_RIGHT);
+ mTransitionMap.put("从下飞入", PLTransitionType.SLIDE_IN_FROM_BOTTOM);
+ mTransitionMap.put("从左擦除", PLTransitionType.WIPE_FROM_LEFT);
+ mTransitionMap.put("从上擦除", PLTransitionType.WIPE_FROM_TOP);
+ mTransitionMap.put("从右擦除", PLTransitionType.WIPE_FROM_RIGHT);
+ mTransitionMap.put("从下擦除", PLTransitionType.WIPE_FROM_BOTTOM);
+ mTransitionMap.put("闪黑", PLTransitionType.FADE_COLOR_BLACK);
+ mTransitionMap.put("闪白", PLTransitionType.FADE_COLOR_WHITE);
+ mTransitionMap.put("圆形缩放", PLTransitionType.CIRCLE_CROP);
+ }
+
+ private void setupAction() {
+ mTexturePreview.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
+ @Override
+ public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
+ mImageComposer.setPreviewTexture(surface);
+ mImageComposer.setPreviewSize(width, height);
+ }
+
+ @Override
+ public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
+ mImageComposer.setPreviewSize(width, height);
+ }
+
+ @Override
+ public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
+ return true;
+ }
+
+ @Override
+ public void onSurfaceTextureUpdated(SurfaceTexture surface) {
+
+ }
+ });
+
+ mBtnAddImage.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent();
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
+ intent.setAction(Intent.ACTION_GET_CONTENT);
+ } else {
+ intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ }
+ intent.setType("image/*");
+ startActivityForResult(Intent.createChooser(intent, "请选择要拼接的图片"), 100);
+ }
+ });
+
+ mBtnStart.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mImageComposer.startPreview();
+ }
+ });
+
+ mBtnResume.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mImageComposer.resumePreview();
+ }
+ });
+
+ mBtnPause.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mImageComposer.pausePreview();
+ }
+ });
+
+ mBtnStop.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mImageComposer.stopPreview();
+ }
+ });
+
+ mBtnSave.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ PLVideoEncodeSetting exportConfig = new PLVideoEncodeSetting(ImageComposeWithTransitionActivity.this);
+ String outputPath = Environment.getExternalStorageDirectory() + "/test_image_composition.mp4";
+ mImageComposer.save(outputPath, exportConfig, new PLVideoSaveListener() {
+ @Override
+ public void onSaveVideoSuccess(final String s) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(ImageComposeWithTransitionActivity.this, "合成成功", Toast.LENGTH_SHORT).show();
+ PlaybackActivity.start(ImageComposeWithTransitionActivity.this, s);
+ }
+ });
+ }
+
+ @Override
+ public void onSaveVideoFailed(int i) {
+
+ }
+
+ @Override
+ public void onSaveVideoCanceled() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(ImageComposeWithTransitionActivity.this, "停止合成", Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
+
+ @Override
+ public void onProgressUpdate(float v) {
+ mProgressBar.setProgress((int) (10000 * v));
+ }
+ });
+ }
+ });
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == Activity.RESULT_OK) {
+ if (requestCode == 100) {
+ final String selectedFilepath = GetPathFromUri.getPath(this, data.getData());
+ Log.i(TAG, "Select file: " + selectedFilepath);
+ if (selectedFilepath != null && !"".equals(selectedFilepath)) {
+ showAddItemDialog(selectedFilepath);
+ }
+ }
+ }
+ }
+
+ private void showAddItemDialog(final String selectedFilepath) {
+ View view = LayoutInflater.from(this).inflate(R.layout.dialog_image_transition, null);
+ final EditText etImageDuration = view.findViewById(R.id.et_image_duration);
+ final EditText etTransitionDuration = view.findViewById(R.id.et_transition_duration);
+ Spinner spinnerTransitionType = view.findViewById(R.id.spinner_transition_type);
+
+ final String[] transitionTypes = mTransitionMap.keySet().toArray(new String[0]);
+ final String[] currentKey = {transitionTypes[0]};
+ ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, transitionTypes);
+ spinnerTransitionType.setAdapter(adapter);
+ spinnerTransitionType.setSelection(0);
+ spinnerTransitionType.setAdapter(adapter);
+ spinnerTransitionType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView> parent, View view, int position, long id) {
+ currentKey[0] = transitionTypes[position];
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parent) {
+
+ }
+ });
+
+ new AlertDialog.Builder(this)
+ .setView(view)
+ .setPositiveButton("确定", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ long imageDuration = Long.parseLong(etImageDuration.getText().toString());
+ long transitionDuration = Long.parseLong(etTransitionDuration.getText().toString());
+ PLTransitionType transitionType = mTransitionMap.get(currentKey[0]);
+ addItem(selectedFilepath, imageDuration, transitionDuration, transitionType);
+ dialog.dismiss();
+ }
+ })
+ .show();
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ if (mImageComposer != null) {
+ mImageComposer.release();
+ }
+ }
+
+ private void addItem(String path, long imageDuration, long transitionDuration, PLTransitionType transitionType) {
+ PLComposeItem item = new PLComposeItem(path);
+ item.setDurationMs(imageDuration);
+ item.setTransitionTimeMs(transitionDuration);
+ item.setItemType(PLComposeItem.ItemType.IMAGE);
+ item.setTransitionType(transitionType);
+ mImageComposer.addItem(item);
+ mImageItemList.add(item);
+ mAdapter.notifyDataSetChanged();
+ }
+
+ private String getTransitionName(PLTransitionType type) {
+ for (Map.Entry entry : mTransitionMap.entrySet()) {
+ if (entry.getValue() == type) {
+ return entry.getKey();
+ }
+ }
+ return "未知转场";
+ }
+
+ private static class ItemViewHolder extends RecyclerView.ViewHolder {
+
+ public ImageView imageView;
+ public TextView textView;
+
+ public ItemViewHolder(Context context) {
+ super(LayoutInflater.from(context).inflate(R.layout.holder_image_composer, null));
+ imageView = (ImageView) itemView.findViewById(R.id.image_view);
+ textView = (TextView) itemView.findViewById(R.id.text_view);
+ }
+ }
+
+}
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ImportAndEditActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ImportAndEditActivity.java
index f442979..1a58613 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ImportAndEditActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ImportAndEditActivity.java
@@ -3,8 +3,8 @@
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import com.qiniu.pili.droid.shortvideo.demo.R;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/MainActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/MainActivity.java
index 637b860..a8dbd3d 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/MainActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/MainActivity.java
@@ -5,7 +5,7 @@
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import com.qiniu.pili.droid.shortvideo.PLAuthenticationResultCallback;
import com.qiniu.pili.droid.shortvideo.PLShortVideoEnv;
@@ -103,6 +103,12 @@ public void onClickImageCompose(View v) {
}
}
+ public void onClickImageCompose2(View v) {
+ if (isPermissionOK()) {
+ jumpToActivity(ImageComposeWithTransitionActivity.class);
+ }
+ }
+
public void onClickAR(View v) {
if (isPermissionOK()) {
jumpToActivity(ArRecordActivity.class);
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/MakeGIFActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/MakeGIFActivity.java
index 9354fa3..f6e84e6 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/MakeGIFActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/MakeGIFActivity.java
@@ -9,8 +9,8 @@
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
-import android.support.v4.util.LruCache;
-import android.support.v7.app.AppCompatActivity;
+import androidx.collection.LruCache;
+import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/MultipleComposeActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/MultipleComposeActivity.java
index ace34b5..c945a41 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/MultipleComposeActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/MultipleComposeActivity.java
@@ -6,7 +6,7 @@
import android.graphics.Movie;
import android.os.Build;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.ContextMenu;
import android.view.MenuItem;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/PlaybackActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/PlaybackActivity.java
index 85fd2d2..eaffc2c 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/PlaybackActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/PlaybackActivity.java
@@ -8,10 +8,9 @@
import android.content.pm.ActivityInfo;
import android.media.MediaPlayer;
import android.os.Bundle;
-import android.support.annotation.Nullable;
+import androidx.annotation.Nullable;
import android.util.DisplayMetrics;
import android.util.Log;
-import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ScreenRecordActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ScreenRecordActivity.java
index 93ac65c..256cca0 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ScreenRecordActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ScreenRecordActivity.java
@@ -3,9 +3,9 @@
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
-import android.support.design.widget.FloatingActionButton;
-import android.support.design.widget.Snackbar;
-import android.support.v7.app.AppCompatActivity;
+import com.google.android.material.floatingactionbutton.FloatingActionButton;
+import com.google.android.material.snackbar.Snackbar;
+import androidx.appcompat.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MenuItem;
@@ -42,7 +42,8 @@ private void requestScreenRecord() {
screenSetting.setRecordFile(Config.SCREEN_RECORD_FILE_PATH)
.setInputAudioEnabled(false)
.setSize(width, height)
- .setDpi(dpi);
+ .setDpi(dpi)
+ .setFps(60);
PLMicrophoneSetting microphoneSetting = new PLMicrophoneSetting();
mScreenRecorder.prepare(screenSetting, microphoneSetting);
}
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ShowGIFActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ShowGIFActivity.java
index 04bf9b0..5acb639 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ShowGIFActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ShowGIFActivity.java
@@ -1,11 +1,10 @@
package com.qiniu.pili.droid.shortvideo.demo.activity;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.view.MenuItem;
import com.qiniu.pili.droid.shortvideo.demo.R;
-import com.qiniu.pili.droid.shortvideo.demo.utils.Config;
import java.io.IOException;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/TransitionMakeActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/TransitionMakeActivity.java
index abec724..34a118c 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/TransitionMakeActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/TransitionMakeActivity.java
@@ -5,8 +5,8 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoComposeActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoComposeActivity.java
index 0bfe77a..f5c495f 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoComposeActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoComposeActivity.java
@@ -5,7 +5,9 @@
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
+
+import androidx.appcompat.app.AppCompatActivity;
+
import android.util.Log;
import android.view.ContextMenu;
import android.view.MenuItem;
@@ -15,8 +17,10 @@
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ListView;
+import android.widget.RadioButton;
import android.widget.Spinner;
+import com.qiniu.pili.droid.shortvideo.PLDisplayMode;
import com.qiniu.pili.droid.shortvideo.PLMediaFile;
import com.qiniu.pili.droid.shortvideo.PLShortVideoComposer;
import com.qiniu.pili.droid.shortvideo.PLVideoEncodeSetting;
@@ -43,6 +47,7 @@ public class VideoComposeActivity extends AppCompatActivity {
private VideoListAdapter mVideoListAdapter;
private ListView mVideoListView;
+ private RadioButton mRbModeFit;
private Spinner mEncodingSizeLevelSpinner;
private Spinner mEncodingBitrateLevelSpinner;
private CheckBox mVideoRangeCheck;
@@ -110,6 +115,8 @@ public boolean onItemLongClick(AdapterView> parent, View view, int position, l
return false;
}
});
+
+ mRbModeFit = findViewById(R.id.rb_mode_fit);
}
@Override
@@ -146,11 +153,14 @@ public void onClickCompose(View v) {
ToastUtils.s(this, "请先添加至少 2 个视频");
return;
}
+
+ PLDisplayMode displayMode = mRbModeFit.isChecked() ? PLDisplayMode.FIT : PLDisplayMode.FULL;
+
PLVideoEncodeSetting setting = new PLVideoEncodeSetting(this);
setting.setEncodingSizeLevel(getEncodingSizeLevel(mEncodingSizeLevelSpinner.getSelectedItemPosition()));
setting.setEncodingBitrate(getEncodingBitrateLevel(mEncodingBitrateLevelSpinner.getSelectedItemPosition()));
- boolean isSucc;
+ boolean composeSuccess;
if (mIsVideoRange) {
List videoRanges = new LinkedList<>();
for (String video : videos) {
@@ -163,12 +173,12 @@ public void onClickCompose(View v) {
videoRange.setEndTime(durationMs / 2);
videoRanges.add(videoRange);
}
- isSucc = mShortVideoComposer.composeVideoRanges(videoRanges, Config.COMPOSE_FILE_PATH, setting, mVideoSaveListener);
+ composeSuccess = mShortVideoComposer.composeVideoRanges(videoRanges, Config.COMPOSE_FILE_PATH, displayMode, setting, mVideoSaveListener);
} else {
- isSucc = mShortVideoComposer.composeVideos(videos, Config.COMPOSE_FILE_PATH, setting, mVideoSaveListener);
+ composeSuccess = mShortVideoComposer.composeVideos(videos, Config.COMPOSE_FILE_PATH, displayMode, setting, mVideoSaveListener);
}
- if (isSucc) {
+ if (composeSuccess) {
mProcessingDialog.show();
} else {
ToastUtils.s(this, "开始拼接失败!");
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoDivideActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoDivideActivity.java
index 66fc755..14d723d 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoDivideActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoDivideActivity.java
@@ -10,9 +10,9 @@
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import android.util.Log;
import android.view.GestureDetector;
import android.view.LayoutInflater;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoEditActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoEditActivity.java
index 2ffd63f..bf20639 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoEditActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoEditActivity.java
@@ -13,9 +13,9 @@
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
-import android.support.annotation.Nullable;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
@@ -55,10 +55,10 @@
import com.qiniu.pili.droid.shortvideo.demo.view.ImageSelectorPanel;
import com.qiniu.pili.droid.shortvideo.demo.view.OnStickerOperateListener;
import com.qiniu.pili.droid.shortvideo.demo.view.PaintSelectorPanel;
-import com.qiniu.pili.droid.shortvideo.demo.view.sticker.StickerImageView;
-import com.qiniu.pili.droid.shortvideo.demo.view.sticker.StickerTextView;
import com.qiniu.pili.droid.shortvideo.demo.view.StrokedTextView;
import com.qiniu.pili.droid.shortvideo.demo.view.TextSelectorPanel;
+import com.qiniu.pili.droid.shortvideo.demo.view.sticker.StickerImageView;
+import com.qiniu.pili.droid.shortvideo.demo.view.sticker.StickerTextView;
import org.json.JSONArray;
import org.json.JSONException;
@@ -80,7 +80,6 @@
public class VideoEditActivity extends Activity implements PLVideoSaveListener {
private static final String TAG = "VideoEditActivity";
private static final String MP4_PATH = "MP4_PATH";
- private static final String PREVIOUS_ORIENTATION = "PREVIOUS_ORIENTATION";
private static final int REQUEST_CODE_PICK_AUDIO_MIX_FILE = 0;
private static final int REQUEST_CODE_DUB = 1;
@@ -127,8 +126,6 @@ private enum PLShortVideoEditorStatus {
private TextView mSpeedTextView;
private View mVisibleView;
- private int mPreviousOrientation;
-
private FrameListView mFrameListView;
private TimerTask mScrollTimerTask;
private Timer mScrollTimer;
@@ -155,13 +152,6 @@ public static void start(Activity activity, String mp4Path) {
activity.startActivity(intent);
}
- public static void start(Activity activity, String mp4Path, int previousOrientation) {
- Intent intent = new Intent(activity, VideoEditActivity.class);
- intent.putExtra(MP4_PATH, mp4Path);
- intent.putExtra(PREVIOUS_ORIENTATION, previousOrientation);
- activity.startActivity(intent);
- }
-
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -180,8 +170,6 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
mFrameListView = (FrameListView) findViewById(R.id.frame_list_view);
mStickerViewGroup = findViewById(R.id.sticker_container_view);
- mPreviousOrientation = getIntent().getIntExtra(PREVIOUS_ORIENTATION, 1);
-
initPreviewView();
initTextSelectorPanel();
initPaintSelectorPanel();
@@ -398,17 +386,35 @@ public void addText(StrokedTextView selectText) {
/**
* 添加图片贴图
*/
- private void addImageView(Drawable drawable) {
- saveViewTimeAndHideRect();
+ private void addImageView(final Drawable drawable) {
+ if (mCurView != null) {
+ final FrameSelectorView selectedView = (FrameSelectorView) mCurView.getTag(R.id.selector_view);
+ selectedView.post(new Runnable() {
+ @Override
+ public void run() {
- StickerImageView stickerImageView = (StickerImageView) View.inflate(VideoEditActivity.this, R.layout.sticker_image_view, null);
- stickerImageView.setImageDrawable(drawable);
+ saveViewTimeAndHideRect();
- mShortVideoEditor.addImageView(stickerImageView);
- stickerImageView.setOnStickerOperateListener(new StickerOperateListener(stickerImageView));
+ StickerImageView stickerImageView = (StickerImageView) View.inflate(VideoEditActivity.this, R.layout.sticker_image_view, null);
+ stickerImageView.setImageDrawable(drawable);
- addSelectorView(stickerImageView);
- showViewBorder(stickerImageView);
+ mShortVideoEditor.addImageView(stickerImageView);
+ stickerImageView.setOnStickerOperateListener(new StickerOperateListener(stickerImageView));
+
+ addSelectorView(stickerImageView);
+ showViewBorder(stickerImageView);
+ }
+ });
+ } else {
+ StickerImageView stickerImageView = (StickerImageView) View.inflate(VideoEditActivity.this, R.layout.sticker_image_view, null);
+ stickerImageView.setImageDrawable(drawable);
+
+ mShortVideoEditor.addImageView(stickerImageView);
+ stickerImageView.setOnStickerOperateListener(new StickerOperateListener(stickerImageView));
+
+ addSelectorView(stickerImageView);
+ showViewBorder(stickerImageView);
+ }
}
/**
@@ -662,16 +668,25 @@ private void initGifViewGroup() {
private void saveViewTimeAndHideRect() {
if (mCurView != null) {
View rectView = mFrameListView.addSelectedRect((View) mCurView.getTag(R.id.selector_view));
- mCurView.setTag(R.id.rect_view, rectView);
- FrameListView.SectionItem sectionItem = mFrameListView.getSectionByRectView(rectView);
- if (mCurView instanceof StickerImageView && ((StickerImageView) mCurView).getGifPath() != null) {
- ((StickerImageView) mCurView).setTime(sectionItem.getStartTime(), sectionItem.getEndTime());
- saveGifSetting();
+ if (rectView != null) {
+ mCurView.setTag(R.id.rect_view, rectView);
+ FrameListView.SectionItem sectionItem = mFrameListView.getSectionByRectView(rectView);
+ if (mCurView instanceof StickerImageView && ((StickerImageView) mCurView).getGifPath() != null) {
+ ((StickerImageView) mCurView).setTime(sectionItem.getStartTime(), sectionItem.getEndTime());
+ saveGifSetting();
+ } else {
+ mShortVideoEditor.setViewTimeline(mCurView, sectionItem.getStartTime(), (sectionItem.getEndTime() - sectionItem.getStartTime()));
+ }
+ mCurView.setSelected(false);
+ mCurView = null;
} else {
- mShortVideoEditor.setViewTimeline(mCurView, sectionItem.getStartTime(), (sectionItem.getEndTime() - sectionItem.getStartTime()));
+ if (mCurView instanceof StickerImageView && ((StickerImageView) mCurView).getGifPath() != null) {
+ ((StickerImageView) mCurView).setTime(0, 0);
+ saveGifSetting();
+ } else {
+ mShortVideoEditor.setViewTimeline(mCurView, 0, 0);
+ }
}
- mCurView.setSelected(false);
- mCurView = null;
}
}
@@ -714,18 +729,10 @@ public void onClickMix(View v) {
* 多重混音
*/
public void onClickMultipleAudioMixing(View v) {
- PLMediaFile mediaFile = new PLMediaFile(mMp4path);
- boolean isPureVideo = !mediaFile.hasAudio();
- mediaFile.release();
-
if (mAudioMixingMode == 0) {
ToastUtils.s(this, "已选择单混音,无法再选择多重混音!");
return;
}
- if (isPureVideo) {
- ToastUtils.s(this, "该视频没有音频信息,无法进行多重混音!");
- return;
- }
Intent intent = new Intent();
if (Build.VERSION.SDK_INT < 19) {
@@ -1127,14 +1134,6 @@ protected void onDestroy() {
}
}
- @Override
- public void finish() {
- if (0 == mPreviousOrientation) {
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
- }
- super.finish();
- }
-
/**
* 设置添加变速时间段
*/
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoFrameActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoFrameActivity.java
index 4186fb2..c8368c5 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoFrameActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoFrameActivity.java
@@ -4,11 +4,11 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.widget.GridLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.SimpleItemAnimator;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.recyclerview.widget.SimpleItemAnimator;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoMixActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoMixActivity.java
index 84fec3d..2113383 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoMixActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoMixActivity.java
@@ -7,7 +7,7 @@
import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
-import android.support.annotation.Nullable;
+import androidx.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoMixRecordActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoMixRecordActivity.java
index ee036f1..10e80d0 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoMixRecordActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoMixRecordActivity.java
@@ -9,7 +9,7 @@
import android.opengl.GLSurfaceView;
import android.os.Build;
import android.os.Bundle;
-import android.support.v7.app.AlertDialog;
+import androidx.appcompat.app.AlertDialog;
import android.util.Log;
import android.view.Display;
import android.view.GestureDetector;
@@ -575,10 +575,10 @@ public void onSaveVideoSuccess(final String filePath) {
@Override
public void run() {
mProcessingDialog.dismiss();
- int screenOrientation = (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE == getRequestedOrientation()) ? 0 : 1;
if (mIsEditVideo) {
- VideoEditActivity.start(VideoMixRecordActivity.this, filePath, screenOrientation);
+ VideoEditActivity.start(VideoMixRecordActivity.this, filePath);
} else {
+ int screenOrientation = (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE == getRequestedOrientation()) ? 0 : 1;
PlaybackActivity.start(VideoMixRecordActivity.this, filePath, screenOrientation);
}
}
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoMixRecordConfigActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoMixRecordConfigActivity.java
index 2dcd5ca..0fafbba 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoMixRecordConfigActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoMixRecordConfigActivity.java
@@ -2,7 +2,7 @@
import android.content.Intent;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import com.qiniu.pili.droid.shortvideo.demo.R;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoRecordActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoRecordActivity.java
index daa328c..eca2124 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoRecordActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoRecordActivity.java
@@ -10,7 +10,7 @@
import android.opengl.GLSurfaceView;
import android.os.Build;
import android.os.Bundle;
-import android.support.v7.app.AlertDialog;
+import androidx.appcompat.app.AlertDialog;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
@@ -110,6 +110,7 @@ public class VideoRecordActivity extends Activity implements PLRecordStateListen
private OrientationEventListener mOrientationListener;
private boolean mSectionBegan;
+ private long mSectionBeginTSMs;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -223,7 +224,6 @@ public void onCancel(DialogInterface dialog) {
mSectionProgressBar.setTotalTime(this, mRecordSetting.getMaxRecordDuration());
mRecordBtn.setOnTouchListener(new View.OnTouchListener() {
- private long mSectionBeginTSMs;
@Override
public boolean onTouch(View v, MotionEvent event) {
@@ -238,24 +238,7 @@ public boolean onTouch(View v, MotionEvent event) {
ToastUtils.s(VideoRecordActivity.this, "无法开始视频段录制");
}
} else if (action == MotionEvent.ACTION_UP) {
- if (mSectionBegan) {
- long sectionRecordDurationMs = System.currentTimeMillis() - mSectionBeginTSMs;
- long totalRecordDurationMs = sectionRecordDurationMs + (mDurationRecordStack.isEmpty() ? 0 : mDurationRecordStack.peek().longValue());
- double sectionVideoDurationMs = sectionRecordDurationMs / mRecordSpeed;
- double totalVideoDurationMs = sectionVideoDurationMs + (mDurationVideoStack.isEmpty() ? 0 : mDurationVideoStack.peek().doubleValue());
- mDurationRecordStack.push(new Long(totalRecordDurationMs));
- mDurationVideoStack.push(new Double(totalVideoDurationMs));
- if (mRecordSetting.IsRecordSpeedVariable()) {
- Log.d(TAG,"SectionRecordDuration: " + sectionRecordDurationMs + "; sectionVideoDuration: " + sectionVideoDurationMs + "; totalVideoDurationMs: " + totalVideoDurationMs + "Section count: " + mDurationVideoStack.size());
- mSectionProgressBar.addBreakPointTime((long) totalVideoDurationMs);
- } else {
- mSectionProgressBar.addBreakPointTime(totalRecordDurationMs);
- }
-
- mSectionProgressBar.setCurrentState(SectionProgressBar.State.PAUSE);
- mShortVideoRecorder.endSection();
- mSectionBegan = false;
- }
+ endSection();
}
return false;
@@ -364,6 +347,7 @@ protected void onResume() {
protected void onPause() {
super.onPause();
updateRecordingBtns(false);
+ endSection();
mShortVideoRecorder.pause();
}
@@ -566,10 +550,10 @@ public void onSaveVideoSuccess(final String filePath) {
@Override
public void run() {
mProcessingDialog.dismiss();
- int screenOrientation = (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE == getRequestedOrientation()) ? 0 : 1;
if (mIsEditVideo) {
- VideoEditActivity.start(VideoRecordActivity.this, filePath, screenOrientation);
+ VideoEditActivity.start(VideoRecordActivity.this, filePath);
} else {
+ int screenOrientation = (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE == getRequestedOrientation()) ? 0 : 1;
PlaybackActivity.start(VideoRecordActivity.this, filePath, screenOrientation);
}
}
@@ -740,4 +724,25 @@ public void onAutoFocusStart() {
public void onAutoFocusStop() {
Log.i(TAG, "auto focus stop");
}
+
+ private void endSection() {
+ if (mSectionBegan) {
+ long sectionRecordDurationMs = System.currentTimeMillis() - mSectionBeginTSMs;
+ long totalRecordDurationMs = sectionRecordDurationMs + (mDurationRecordStack.isEmpty() ? 0 : mDurationRecordStack.peek().longValue());
+ double sectionVideoDurationMs = sectionRecordDurationMs / mRecordSpeed;
+ double totalVideoDurationMs = sectionVideoDurationMs + (mDurationVideoStack.isEmpty() ? 0 : mDurationVideoStack.peek().doubleValue());
+ mDurationRecordStack.push(new Long(totalRecordDurationMs));
+ mDurationVideoStack.push(new Double(totalVideoDurationMs));
+ if (mRecordSetting.IsRecordSpeedVariable()) {
+ Log.d(TAG, "SectionRecordDuration: " + sectionRecordDurationMs + "; sectionVideoDuration: " + sectionVideoDurationMs + "; totalVideoDurationMs: " + totalVideoDurationMs + "Section count: " + mDurationVideoStack.size());
+ mSectionProgressBar.addBreakPointTime((long) totalVideoDurationMs);
+ } else {
+ mSectionProgressBar.addBreakPointTime(totalRecordDurationMs);
+ }
+
+ mSectionProgressBar.setCurrentState(SectionProgressBar.State.PAUSE);
+ mShortVideoRecorder.endSection();
+ mSectionBegan = false;
+ }
+ }
}
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoTranscodeActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoTranscodeActivity.java
index 78158a7..c2755b5 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoTranscodeActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoTranscodeActivity.java
@@ -5,10 +5,10 @@
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.widget.AppCompatCheckBox;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.AppCompatCheckBox;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoTrimActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoTrimActivity.java
index 558f541..978c1bb 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoTrimActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/VideoTrimActivity.java
@@ -8,7 +8,7 @@
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
-import android.support.annotation.Nullable;
+import androidx.annotation.Nullable;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/WebViewActivity.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/WebViewActivity.java
index 8dc9cd2..082a6eb 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/WebViewActivity.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/WebViewActivity.java
@@ -2,7 +2,7 @@
import android.content.Intent;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.text.TextUtils;
import android.webkit.WebSettings;
import android.webkit.WebView;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/AudioMixSettingDialog.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/AudioMixSettingDialog.java
index f9dc553..580f2f4 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/AudioMixSettingDialog.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/AudioMixSettingDialog.java
@@ -2,9 +2,9 @@
import android.content.Context;
import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.design.widget.BottomSheetBehavior;
-import android.support.design.widget.BottomSheetDialog;
+import androidx.annotation.NonNull;
+import com.google.android.material.bottomsheet.BottomSheetBehavior;
+import com.google.android.material.bottomsheet.BottomSheetDialog;
import android.view.View;
import android.widget.SeekBar;
@@ -37,8 +37,8 @@ public AudioMixSettingDialog(Context context){
@Override
protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_audio_mix);
+ super.onCreate(savedInstanceState);
mSrcVolumeSeekBar = (SeekBar) findViewById(R.id.fg_volume);
mSrcVolumeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@@ -133,7 +133,7 @@ public void setOnAudioVolumeChangedListener(OnAudioVolumeChangedListener listene
}
private void setBehaviorCallback() {
- View view = getDelegate().findViewById(android.support.design.R.id.design_bottom_sheet);
+ View view = getDelegate().findViewById(R.id.design_bottom_sheet);
final BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(view);
bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/DragItemAdapter.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/DragItemAdapter.java
index 1348dbf..637809b 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/DragItemAdapter.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/DragItemAdapter.java
@@ -3,7 +3,7 @@
import android.graphics.Bitmap;
import android.media.ThumbnailUtils;
import android.provider.MediaStore;
-import android.support.v7.widget.RecyclerView;
+import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/FocusIndicator.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/FocusIndicator.java
index 0bbcb3f..357386e 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/FocusIndicator.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/FocusIndicator.java
@@ -1,7 +1,7 @@
package com.qiniu.pili.droid.shortvideo.demo.view;
import android.content.Context;
-import android.support.annotation.Nullable;
+import androidx.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/FrameListView.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/FrameListView.java
index 11ddcdd..0d20cd1 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/FrameListView.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/FrameListView.java
@@ -3,10 +3,10 @@
import android.content.Context;
import android.graphics.Bitmap;
import android.os.AsyncTask;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
@@ -21,7 +21,6 @@
import com.qiniu.pili.droid.shortvideo.demo.R;
import java.lang.ref.WeakReference;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -110,18 +109,9 @@ public void scrollToTime(long time) {
public FrameSelectorView addSelectorView() {
mCurSelectorView = new FrameSelectorView(mContext);
final FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, mFrameHeight);
- mCurSelectorView.setVisibility(View.INVISIBLE);
+ layoutParams.leftMargin = (mScrollViewParent.getWidth() - mCurSelectorView.getWidth()) / 2;
+ mCurSelectorView.setLayoutParams(layoutParams);
mScrollViewParent.addView(mCurSelectorView, layoutParams);
-
- mCurSelectorView.post(new Runnable() {
- @Override
- public void run() {
- // put mCurSelectorView to the middle of the horizontal
- layoutParams.leftMargin = (mScrollViewParent.getWidth() - mCurSelectorView.getWidth()) / 2;
- mCurSelectorView.setLayoutParams(layoutParams);
- mCurSelectorView.setVisibility(View.VISIBLE);
- }
- });
return mCurSelectorView;
}
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/FrameSelectorView.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/FrameSelectorView.java
index 301eee2..f1f9326 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/FrameSelectorView.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/FrameSelectorView.java
@@ -118,6 +118,9 @@ public boolean onTouch(View v, MotionEvent event) {
}
public int getBodyLeft() {
+ if (mGroupLayoutParam == null){
+ mGroupLayoutParam = (FrameLayout.LayoutParams) getLayoutParams();
+ }
return mGroupLayoutParam.leftMargin + mHandlerLeft.getWidth();
}
@@ -126,7 +129,18 @@ public int getLeftHandlerWidth() {
}
public int getBodyWidth() {
- return mHandlerBody.getWidth();
+ int width = mHandlerBody.getWidth();
+ if (width == 0) {
+ float scale = getResources().getDisplayMetrics().density;
+ int preferWidth = (int) ((100 * scale) + 0.5f);
+ int preferHeight = getLayoutParams().height;
+
+ int widthMeasureSpec = MeasureSpec.makeMeasureSpec(preferWidth, MeasureSpec.EXACTLY);
+ int heightMeasureSpec = MeasureSpec.makeMeasureSpec(preferHeight, MeasureSpec.EXACTLY);
+ mHandlerBody.measure(widthMeasureSpec, heightMeasureSpec);
+ return mHandlerBody.getMeasuredWidth();
+ }
+ return width;
}
public int getBodyRight() {
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/GifSelectorPanel.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/GifSelectorPanel.java
index d57a239..dcbee39 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/GifSelectorPanel.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/GifSelectorPanel.java
@@ -1,9 +1,9 @@
package com.qiniu.pili.droid.shortvideo.demo.view;
import android.content.Context;
-import android.support.annotation.Nullable;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/ImageSelectorPanel.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/ImageSelectorPanel.java
index 82576dc..6e4b8dd 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/ImageSelectorPanel.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/ImageSelectorPanel.java
@@ -4,9 +4,9 @@
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
-import android.support.annotation.Nullable;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/ItemView.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/ItemView.java
index a85fbda..4d8d5f2 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/ItemView.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/ItemView.java
@@ -2,7 +2,7 @@
import android.content.Context;
import android.content.res.TypedArray;
-import android.support.annotation.Nullable;
+import androidx.annotation.Nullable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/PaintSelectorPanel.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/PaintSelectorPanel.java
index a413706..8f57a4e 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/PaintSelectorPanel.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/PaintSelectorPanel.java
@@ -1,9 +1,9 @@
package com.qiniu.pili.droid.shortvideo.demo.view;
import android.content.Context;
-import android.support.annotation.Nullable;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/TextSelectorPanel.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/TextSelectorPanel.java
index f12255a..fe5d87a 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/TextSelectorPanel.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/TextSelectorPanel.java
@@ -3,9 +3,9 @@
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
-import android.support.annotation.Nullable;
-import android.support.v7.widget.GridLayoutManager;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/TransitionEditView.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/TransitionEditView.java
index 35524b0..47e532d 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/TransitionEditView.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/TransitionEditView.java
@@ -3,7 +3,7 @@
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
-import android.support.annotation.Nullable;
+import androidx.annotation.Nullable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/VerticalSeekBar.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/VerticalSeekBar.java
index f51f081..a8c8970 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/VerticalSeekBar.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/VerticalSeekBar.java
@@ -2,7 +2,7 @@
import android.content.Context;
import android.graphics.Canvas;
-import android.support.v7.widget.AppCompatSeekBar;
+import androidx.appcompat.widget.AppCompatSeekBar;
import android.util.AttributeSet;
import android.view.MotionEvent;
diff --git a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/sticker/StickerImageView.java b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/sticker/StickerImageView.java
index 13a63f9..c66b1f6 100644
--- a/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/sticker/StickerImageView.java
+++ b/ShortVideoFunctionDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/sticker/StickerImageView.java
@@ -12,16 +12,15 @@
import android.graphics.Path;
import android.graphics.Point;
import android.graphics.PointF;
+import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.MotionEvent;
-import android.view.View;
import android.view.ViewGroup;
-
import com.qiniu.pili.droid.shortvideo.PLImageView;
import com.qiniu.pili.droid.shortvideo.demo.R;
import com.qiniu.pili.droid.shortvideo.demo.gif.GifDecoder;
@@ -29,7 +28,6 @@
import com.qiniu.pili.droid.shortvideo.demo.utils.Utils;
import com.qiniu.pili.droid.shortvideo.demo.view.OnStickerOperateListener;
-
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -213,6 +211,8 @@ public class StickerImageView extends PLImageView {
private OnStickerOperateListener mClickListener;
+ private Rect mImagePosition;
+
public StickerImageView(Context context) {
this(context, null);
}
@@ -479,6 +479,15 @@ private void adjustLayout() {
mViewPaddingLeft = newPaddingLeft;
mViewPaddingTop = newPaddingTop;
}
+
+ if (mImagePosition == null) {
+ mImagePosition = new Rect();
+ }
+ mImagePosition.left = newPaddingLeft;
+ mImagePosition.top = newPaddingTop;
+ mImagePosition.right = newPaddingLeft + actualWidth;
+ mImagePosition.bottom = newPaddingTop + actualHeight;
+
layout(newPaddingLeft, newPaddingTop, newPaddingLeft + actualWidth, newPaddingTop + actualHeight);
mX = newPaddingLeft + mControlDrawableWidth / 2;
@@ -932,4 +941,15 @@ public void onFrameReady() {
invalidate();
}
};
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ super.onLayout(changed, left, top, right, bottom);
+ // 避免非预期的布局变化
+ if (changed && mImagePosition != null
+ && (left != mImagePosition.left || top != mImagePosition.top
+ || right != mImagePosition.right || bottom != mImagePosition.bottom)) {
+ layout(mImagePosition.left, mImagePosition.top, mImagePosition.right, mImagePosition.bottom);
+ }
+ }
}
diff --git a/ShortVideoFunctionDemo/app/src/main/jniLibs/armeabi-v7a/libpldroid_shortvideo_core.so b/ShortVideoFunctionDemo/app/src/main/jniLibs/armeabi-v7a/libpldroid_shortvideo_core.so
index 380a5bb..caae00b 100755
Binary files a/ShortVideoFunctionDemo/app/src/main/jniLibs/armeabi-v7a/libpldroid_shortvideo_core.so and b/ShortVideoFunctionDemo/app/src/main/jniLibs/armeabi-v7a/libpldroid_shortvideo_core.so differ
diff --git a/ShortVideoFunctionDemo/app/src/main/res/layout/activity_config.xml b/ShortVideoFunctionDemo/app/src/main/res/layout/activity_config.xml
index 09731e5..c39fd3e 100644
--- a/ShortVideoFunctionDemo/app/src/main/res/layout/activity_config.xml
+++ b/ShortVideoFunctionDemo/app/src/main/res/layout/activity_config.xml
@@ -1,31 +1,30 @@
+ android:layout_height="48dp"
+ android:background="@color/colorPrimary">
+ android:src="@mipmap/btn_back" />
+ android:textSize="18sp" />
@@ -37,82 +36,95 @@
android:textSize="20sp"
android:textStyle="bold" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="match_parent">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
\ No newline at end of file
diff --git a/ShortVideoFunctionDemo/app/src/main/res/layout/activity_editor.xml b/ShortVideoFunctionDemo/app/src/main/res/layout/activity_editor.xml
index da2b368..89e46fc 100644
--- a/ShortVideoFunctionDemo/app/src/main/res/layout/activity_editor.xml
+++ b/ShortVideoFunctionDemo/app/src/main/res/layout/activity_editor.xml
@@ -343,7 +343,7 @@
android:background="@android:color/background_dark"
android:visibility="gone" />
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ShortVideoFunctionDemo/app/src/main/res/layout/activity_main.xml b/ShortVideoFunctionDemo/app/src/main/res/layout/activity_main.xml
index 081ab14..a5bda3d 100644
--- a/ShortVideoFunctionDemo/app/src/main/res/layout/activity_main.xml
+++ b/ShortVideoFunctionDemo/app/src/main/res/layout/activity_main.xml
@@ -1,38 +1,39 @@
+ android:layout_height="48dp"
+ android:background="@color/colorPrimary">
+ android:textSize="18sp" />
+ android:scaleType="centerInside"
+ app:srcCompat="@drawable/ic_settings_white_24dp" />
+ android:layout_height="match_parent"
+ android:background="@color/lsq_color_gray_bg">
+
+
+
+
\ No newline at end of file
diff --git a/ShortVideoFunctionDemo/app/src/main/res/layout/activity_screen_record.xml b/ShortVideoFunctionDemo/app/src/main/res/layout/activity_screen_record.xml
index df7b8d0..fda109b 100644
--- a/ShortVideoFunctionDemo/app/src/main/res/layout/activity_screen_record.xml
+++ b/ShortVideoFunctionDemo/app/src/main/res/layout/activity_screen_record.xml
@@ -1,5 +1,5 @@
-
@@ -21,7 +21,7 @@
-
-
-
+
diff --git a/ShortVideoFunctionDemo/app/src/main/res/layout/activity_transcode.xml b/ShortVideoFunctionDemo/app/src/main/res/layout/activity_transcode.xml
index 3d0e18d..590a163 100644
--- a/ShortVideoFunctionDemo/app/src/main/res/layout/activity_transcode.xml
+++ b/ShortVideoFunctionDemo/app/src/main/res/layout/activity_transcode.xml
@@ -306,7 +306,7 @@
android:textSize="15sp" />
-
-
diff --git a/ShortVideoFunctionDemo/app/src/main/res/layout/activity_video_compose.xml b/ShortVideoFunctionDemo/app/src/main/res/layout/activity_video_compose.xml
index dc29817..e23ca95 100644
--- a/ShortVideoFunctionDemo/app/src/main/res/layout/activity_video_compose.xml
+++ b/ShortVideoFunctionDemo/app/src/main/res/layout/activity_video_compose.xml
@@ -27,6 +27,33 @@
android:layout_margin="10dp"
android:text="仅选取每段视频的前半段进行拼接" />
+
+
+
+
+
+
+
+
+
-
diff --git a/ShortVideoFunctionDemo/app/src/main/res/layout/activity_video_frame.xml b/ShortVideoFunctionDemo/app/src/main/res/layout/activity_video_frame.xml
index 6383bb3..9872eed 100644
--- a/ShortVideoFunctionDemo/app/src/main/res/layout/activity_video_frame.xml
+++ b/ShortVideoFunctionDemo/app/src/main/res/layout/activity_video_frame.xml
@@ -48,12 +48,12 @@
android:layout_height="0dp"
android:layout_weight="1">
-
-
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ShortVideoFunctionDemo/app/src/main/res/layout/frame_list_view.xml b/ShortVideoFunctionDemo/app/src/main/res/layout/frame_list_view.xml
index 33a0319..fdaa9bd 100644
--- a/ShortVideoFunctionDemo/app/src/main/res/layout/frame_list_view.xml
+++ b/ShortVideoFunctionDemo/app/src/main/res/layout/frame_list_view.xml
@@ -17,7 +17,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
-
diff --git a/ShortVideoFunctionDemo/app/src/main/res/layout/holder_image_composer.xml b/ShortVideoFunctionDemo/app/src/main/res/layout/holder_image_composer.xml
new file mode 100644
index 0000000..25f31e9
--- /dev/null
+++ b/ShortVideoFunctionDemo/app/src/main/res/layout/holder_image_composer.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ShortVideoFunctionDemo/app/src/main/res/layout/panel_image_selector.xml b/ShortVideoFunctionDemo/app/src/main/res/layout/panel_image_selector.xml
index c32c483..30c6eda 100644
--- a/ShortVideoFunctionDemo/app/src/main/res/layout/panel_image_selector.xml
+++ b/ShortVideoFunctionDemo/app/src/main/res/layout/panel_image_selector.xml
@@ -4,7 +4,7 @@
android:layout_height="match_parent"
android:orientation="vertical">
-
diff --git a/ShortVideoFunctionDemo/app/src/main/res/layout/panel_paint_selector.xml b/ShortVideoFunctionDemo/app/src/main/res/layout/panel_paint_selector.xml
index 36940ff..359d456 100644
--- a/ShortVideoFunctionDemo/app/src/main/res/layout/panel_paint_selector.xml
+++ b/ShortVideoFunctionDemo/app/src/main/res/layout/panel_paint_selector.xml
@@ -102,7 +102,7 @@
android:gravity="center_vertical"
android:orientation="horizontal">
-
diff --git a/ShortVideoFunctionDemo/app/src/main/res/layout/panel_text_selector.xml b/ShortVideoFunctionDemo/app/src/main/res/layout/panel_text_selector.xml
index 8a575ce..dbb0af1 100644
--- a/ShortVideoFunctionDemo/app/src/main/res/layout/panel_text_selector.xml
+++ b/ShortVideoFunctionDemo/app/src/main/res/layout/panel_text_selector.xml
@@ -13,7 +13,7 @@
android:background="#0000"
android:src="@drawable/btn_close" />
-
-
-
+ package="com.qiniu.shortvideo.app">
@@ -18,42 +18,55 @@
android:name=".ShortVideoApplication"
android:allowBackup="true"
android:hardwareAccelerated="true"
- android:largeHeap="true"
android:icon="@mipmap/qn_app_icon"
android:label="@string/app_name"
+ android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
-
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/ShortVideoUIDemo/app/src/main/assets/filters/elegance/filter.png b/ShortVideoUIDemo/app/src/main/assets/filters/elegance/filter.png
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/assets/filters/funky/filter.png b/ShortVideoUIDemo/app/src/main/assets/filters/funky/filter.png
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/assets/filters/miss/filter.png b/ShortVideoUIDemo/app/src/main/assets/filters/miss/filter.png
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/assets/filters/waltz/filter.png b/ShortVideoUIDemo/app/src/main/assets/filters/waltz/filter.png
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/assets/filters/west/filter.png b/ShortVideoUIDemo/app/src/main/assets/filters/west/filter.png
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/activity/VideoEditActivity.java b/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/activity/VideoEditActivity.java
index 0587c88..ea32c94 100644
--- a/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/activity/VideoEditActivity.java
+++ b/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/activity/VideoEditActivity.java
@@ -677,8 +677,13 @@ public void onClickMv(View v) {
// copy mv assets to sdcard
if (!dir.exists()) {
dir.mkdirs();
- String[] fs = getAssets().list("mvs");
+ }
+ String[] fs = getAssets().list("mvs");
+ if (fs != null) {
for (String file : fs) {
+ if (new File(dir, file).exists()) {
+ continue;
+ }
InputStream is = getAssets().open("mvs/" + file);
FileOutputStream fos = new FileOutputStream(new File(dir, file));
byte[] buffer = new byte[1024];
diff --git a/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/faceunity/BeautyControlView.java b/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/faceunity/BeautyControlView.java
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/faceunity/BeautyParameterModel.java b/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/faceunity/BeautyParameterModel.java
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/AdvancedFilterAdapter.java b/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/AdvancedFilterAdapter.java
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/SceneRecyclerAdapter.java b/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/SceneRecyclerAdapter.java
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/TuSdkMovieScrollPlayLineView.java b/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/TuSdkMovieScrollPlayLineView.java
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/playview/TuSdkMovieCoverListView.java b/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/playview/TuSdkMovieCoverListView.java
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/playview/TuSdkMovieScrollContent.java b/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/playview/TuSdkMovieScrollContent.java
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/playview/TuSdkMovieScrollView.java b/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/playview/TuSdkMovieScrollView.java
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/playview/TuSdkRangeSelectionBar.java b/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/playview/TuSdkRangeSelectionBar.java
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/playview/rangeselect/TuSdkMovieColorGroupView.java b/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/playview/rangeselect/TuSdkMovieColorGroupView.java
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/playview/rangeselect/TuSdkMovieColorRectView.java b/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/playview/rangeselect/TuSdkMovieColorRectView.java
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/playview/rangeselect/TuSdkMovieGrayView.java b/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/tusdk/playview/rangeselect/TuSdkMovieGrayView.java
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/view/layer/StickerTextView.java b/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/view/layer/StickerTextView.java
index 54e45ae..af698c5 100644
--- a/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/view/layer/StickerTextView.java
+++ b/ShortVideoUIDemo/app/src/main/java/com/qiniu/shortvideo/app/view/layer/StickerTextView.java
@@ -29,8 +29,8 @@ public class StickerTextView extends PLTextView {
/**
* 文字的最大、最小缩放比例
*/
- private static final float MAX_SCALE = 8.0f;
- private static final float MIN_SCALE = 0.6f;
+ private static final float MAX_SCALE = 4.0f;
+ private static final float MIN_SCALE = 0.3f;
/**
* 控制缩放,旋转图标所在四个点得位置
diff --git a/ShortVideoUIDemo/app/src/main/jniLibs/armeabi-v7a/libQPlayer.so b/ShortVideoUIDemo/app/src/main/jniLibs/armeabi-v7a/libQPlayer.so
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/jniLibs/armeabi-v7a/libpldroid_amix.so b/ShortVideoUIDemo/app/src/main/jniLibs/armeabi-v7a/libpldroid_amix.so
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/jniLibs/armeabi-v7a/libpldroid_crash.so b/ShortVideoUIDemo/app/src/main/jniLibs/armeabi-v7a/libpldroid_crash.so
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/jniLibs/armeabi-v7a/libqcOpenSSL.so b/ShortVideoUIDemo/app/src/main/jniLibs/armeabi-v7a/libqcOpenSSL.so
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_edgemagic01.gif b/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_edgemagic01.gif
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_livefancy01_1.gif b/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_livefancy01_1.gif
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_liveheartbeat01.gif b/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_liveheartbeat01.gif
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_livelightning01.gif b/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_livelightning01.gif
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_livemegrim01.gif b/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_livemegrim01.gif
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_livemirrorimage01.gif b/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_livemirrorimage01.gif
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_liveoldtv01.gif b/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_liveoldtv01.gif
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_liveshake01.gif b/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_liveshake01.gif
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_livesignal01.gif b/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_livesignal01.gif
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_liveslosh01.gif b/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_liveslosh01.gif
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_livesoulout01.gif b/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_livesoulout01.gif
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_livexray01.gif b/ShortVideoUIDemo/app/src/main/res/drawable/lsq_filter_thumb_livexray01.gif
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/lsq_left_bar.xml b/ShortVideoUIDemo/app/src/main/res/drawable/lsq_left_bar.xml
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/lsq_left_bar_rect.xml b/ShortVideoUIDemo/app/src/main/res/drawable/lsq_left_bar_rect.xml
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/lsq_right_bar.xml b/ShortVideoUIDemo/app/src/main/res/drawable/lsq_right_bar.xml
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/lsq_right_bar_rect.xml b/ShortVideoUIDemo/app/src/main/res/drawable/lsq_right_bar_rect.xml
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/shape_paint_border.xml b/ShortVideoUIDemo/app/src/main/res/drawable/shape_paint_border.xml
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/tusdk_view_dubbing_roundcorner_none_bg.xml b/ShortVideoUIDemo/app/src/main/res/drawable/tusdk_view_dubbing_roundcorner_none_bg.xml
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/tusdk_view_filter_unselected_text_roundcorner.xml b/ShortVideoUIDemo/app/src/main/res/drawable/tusdk_view_filter_unselected_text_roundcorner.xml
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/tusdk_view_widget_seekbar_bottom_bg.xml b/ShortVideoUIDemo/app/src/main/res/drawable/tusdk_view_widget_seekbar_bottom_bg.xml
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/tusdk_view_widget_seekbar_drag.xml b/ShortVideoUIDemo/app/src/main/res/drawable/tusdk_view_widget_seekbar_drag.xml
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/drawable/tusdk_view_widget_seekbar_top_bg.xml b/ShortVideoUIDemo/app/src/main/res/drawable/tusdk_view_widget_seekbar_top_bg.xml
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/layout/filter_config_seekbar.xml b/ShortVideoUIDemo/app/src/main/res/layout/filter_config_seekbar.xml
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/layout/filter_config_view.xml b/ShortVideoUIDemo/app/src/main/res/layout/filter_config_view.xml
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/layout/lsq_play_line_view.xml b/ShortVideoUIDemo/app/src/main/res/layout/lsq_play_line_view.xml
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/layout/lsq_range_selection.xml b/ShortVideoUIDemo/app/src/main/res/layout/lsq_range_selection.xml
old mode 100644
new mode 100755
diff --git a/ShortVideoUIDemo/app/src/main/res/layout/sticker_image_view.xml b/ShortVideoUIDemo/app/src/main/res/layout/sticker_image_view.xml
index 1ff71cd..95abce5 100644
--- a/ShortVideoUIDemo/app/src/main/res/layout/sticker_image_view.xml
+++ b/ShortVideoUIDemo/app/src/main/res/layout/sticker_image_view.xml
@@ -1,15 +1,15 @@
\ No newline at end of file
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/overlay_touch_view"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerInParent="true"
+ android:layerType="hardware"
+ app:controlDrawable="@mipmap/qn_rotate"
+ app:controlLocation="right_bottom"
+ app:deleteDrawable="@mipmap/qn_delete"
+ app:editDrawable="@mipmap/qn_edit"
+ app:frameColor="@color/white"
+ app:frameWidth="1dp"
+ app:scale="1.0" />
\ No newline at end of file
diff --git a/ShortVideoUIDemo/app/src/main/res/layout/sticker_text_view.xml b/ShortVideoUIDemo/app/src/main/res/layout/sticker_text_view.xml
index ee2d2de..c592476 100644
--- a/ShortVideoUIDemo/app/src/main/res/layout/sticker_text_view.xml
+++ b/ShortVideoUIDemo/app/src/main/res/layout/sticker_text_view.xml
@@ -1,14 +1,12 @@
-