From af92d203fe58e6f9687f943b8da644e82568b121 Mon Sep 17 00:00:00 2001 From: xufulong <839789740@qq.com> Date: Sat, 2 Nov 2019 15:10:06 +0800 Subject: [PATCH] =?UTF-8?q?Activity=E5=9F=BA=E7=B1=BB=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Activity基类增加选择文件,滤镜选择文件后自动播放 --- .../frank/ffmpeg/activity/BaseActivity.java | 42 ++++++++- .../frank/ffmpeg/activity/FilterActivity.java | 81 ++++++++++++------ .../frank/ffmpeg/activity/MainActivity.java | 3 +- .../java/com/frank/ffmpeg/util/FileUtil.java | 2 + app/src/main/res/layout/activity_filter.xml | 9 ++ app/src/main/res/menu/menu_setting.xml | 8 ++ app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2206 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2555 -> 0 bytes app/src/main/res/values/strings.xml | 3 + 9 files changed, 119 insertions(+), 29 deletions(-) create mode 100644 app/src/main/res/menu/menu_setting.xml delete mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png diff --git a/app/src/main/java/com/frank/ffmpeg/activity/BaseActivity.java b/app/src/main/java/com/frank/ffmpeg/activity/BaseActivity.java index 71c6451..652cd52 100644 --- a/app/src/main/java/com/frank/ffmpeg/activity/BaseActivity.java +++ b/app/src/main/java/com/frank/ffmpeg/activity/BaseActivity.java @@ -6,11 +6,21 @@ import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; +import android.text.TextUtils; import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; +import android.widget.Toast; +import com.frank.ffmpeg.R; import com.frank.ffmpeg.util.ContentUtil; +/** + * Activity基类 + * Created by frank on 2019/11/2. + */ + public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener { private final static String TAG = BaseActivity.class.getSimpleName(); @@ -24,12 +34,11 @@ public abstract class BaseActivity extends AppCompatActivity implements View.OnC protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - initWindow(); requestPermission(); setContentView(getLayoutId()); } - private void initWindow() { + protected void hideActionBar() { if (getSupportActionBar() != null) { getSupportActionBar().hide(); } @@ -77,6 +86,35 @@ public abstract class BaseActivity extends AppCompatActivity implements View.OnC } } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_setting, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_select: + selectFile(); + break; + default: + break; + } + return super.onOptionsItemSelected(item); + } + + protected void showToast(String msg) { + if (TextUtils.isEmpty(msg)) { + return; + } + Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + } + + protected void showSelectFile() { + showToast(getString(R.string.please_select)); + } + protected T getView(int viewId) { return (T) findViewById(viewId); } diff --git a/app/src/main/java/com/frank/ffmpeg/activity/FilterActivity.java b/app/src/main/java/com/frank/ffmpeg/activity/FilterActivity.java index 44e6364..668ca88 100644 --- a/app/src/main/java/com/frank/ffmpeg/activity/FilterActivity.java +++ b/app/src/main/java/com/frank/ffmpeg/activity/FilterActivity.java @@ -1,16 +1,15 @@ package com.frank.ffmpeg.activity; import android.annotation.SuppressLint; -import android.os.Environment; import android.os.Handler; import android.os.Message; -import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; +import android.widget.Button; import android.widget.CompoundButton; import android.widget.ToggleButton; @@ -20,17 +19,19 @@ import com.frank.ffmpeg.adapter.HorizontalAdapter; import com.frank.ffmpeg.listener.OnItemClickListener; import com.frank.ffmpeg.util.FileUtil; -import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -public class FilterActivity extends AppCompatActivity implements SurfaceHolder.Callback{ +/** + * 使用ffmpeg进行滤镜 + * Created by frank on 2018/6/5. + */ + +public class FilterActivity extends BaseActivity implements SurfaceHolder.Callback{ - //SD卡根目录 - private final static String PATH = Environment.getExternalStorageDirectory().getPath(); //本地视频路径 - private final static String VIDEO_PATH = PATH + File.separator + "Beyond.mp4"; + private String videoPath = ""; private VideoPlayer videoPlayer; private SurfaceView surfaceView; @@ -69,6 +70,7 @@ public class FilterActivity extends AppCompatActivity implements SurfaceHolder.C //是否播放音频 private boolean playAudio = true; private ToggleButton btnSound; + private Button btnSelect; private final static int MSG_HIDE = 222; private final static int DELAY_TIME = 5000; @@ -80,6 +82,7 @@ public class FilterActivity extends AppCompatActivity implements SurfaceHolder.C if (msg.what == MSG_HIDE){//无操作5s后隐藏滤镜操作栏 recyclerView.setVisibility(View.GONE); btnSound.setVisibility(View.GONE); + btnSelect.setVisibility(View.GONE); } } }; @@ -93,10 +96,13 @@ public class FilterActivity extends AppCompatActivity implements SurfaceHolder.C private HideRunnable hideRunnable; @Override - protected void onCreate(Bundle savedInstanceState) { + int getLayoutId() { + return R.layout.activity_filter; + } + @Override + protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_filter); initView(); registerLister(); @@ -106,13 +112,13 @@ public class FilterActivity extends AppCompatActivity implements SurfaceHolder.C } private void initView(){ - surfaceView = (SurfaceView) findViewById(R.id.surface_filter); + surfaceView = getView(R.id.surface_filter); surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(this); videoPlayer = new VideoPlayer(); - btnSound = (ToggleButton) findViewById(R.id.btn_sound); + btnSound = getView(R.id.btn_sound); - recyclerView = (RecyclerView) findViewById(R.id.recycler_view); + recyclerView = getView(R.id.recycler_view); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); recyclerView.setLayoutManager(linearLayoutManager); @@ -120,6 +126,9 @@ public class FilterActivity extends AppCompatActivity implements SurfaceHolder.C itemList.addAll(Arrays.asList(txtArray)); horizontalAdapter = new HorizontalAdapter(itemList); recyclerView.setAdapter(horizontalAdapter); + + btnSelect = getView(R.id.btn_select_file); + initViewsWithClick(R.id.btn_select_file); } //注册监听器 @@ -129,28 +138,18 @@ public class FilterActivity extends AppCompatActivity implements SurfaceHolder.C public void onItemClick(int position) { if(!surfaceCreated) return; - if (!FileUtil.checkFileExist(VIDEO_PATH)){ + if (!FileUtil.checkFileExist(videoPath)){ + showSelectFile(); return; } - - final int mPosition = position; - new Thread(new Runnable() { - @Override - public void run() { - //切换播放 - if(isPlaying){ - videoPlayer.again(); - } - isPlaying = true; - videoPlayer.filter(VIDEO_PATH, surfaceHolder.getSurface(), filters[mPosition]); - } - }).start(); + doFilterPlay(position); } }); surfaceView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + btnSelect.setVisibility(View.VISIBLE); btnSound.setVisibility(View.VISIBLE); recyclerView.setVisibility(View.VISIBLE);//按下SurfaceView,弹出滤镜操作栏 mHandler.postDelayed(hideRunnable, DELAY_TIME);//5s后发消息通知隐藏滤镜操作栏 @@ -165,6 +164,20 @@ public class FilterActivity extends AppCompatActivity implements SurfaceHolder.C }); } + private void doFilterPlay(final int position) { + new Thread(new Runnable() { + @Override + public void run() { + //切换播放 + if(isPlaying){ + videoPlayer.again(); + } + isPlaying = true; + videoPlayer.filter(videoPath, surfaceHolder.getSurface(), filters[position]); + } + }).start(); + } + //设置是否静音 private void setPlayAudio(){ playAudio = !playAudio; @@ -195,4 +208,20 @@ public class FilterActivity extends AppCompatActivity implements SurfaceHolder.C horizontalAdapter = null; } + @Override + void onViewClick(View view) { + if (view.getId() == R.id.btn_select_file) { + selectFile(); + } + } + + @Override + void onSelectedFile(String filePath) { + videoPath = filePath; + //选择滤镜模式 + doFilterPlay(6); + //默认关闭声音 + btnSound.setChecked(true); + } + } diff --git a/app/src/main/java/com/frank/ffmpeg/activity/MainActivity.java b/app/src/main/java/com/frank/ffmpeg/activity/MainActivity.java index 9baa0d8..bea5ef3 100644 --- a/app/src/main/java/com/frank/ffmpeg/activity/MainActivity.java +++ b/app/src/main/java/com/frank/ffmpeg/activity/MainActivity.java @@ -26,6 +26,7 @@ public class MainActivity extends BaseActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + hideActionBar(); initViewsWithClick( R.id.btn_audio, R.id.btn_video, @@ -102,5 +103,5 @@ public class MainActivity extends BaseActivity { void onSelectedFile(String filePath) { } - + } diff --git a/app/src/main/java/com/frank/ffmpeg/util/FileUtil.java b/app/src/main/java/com/frank/ffmpeg/util/FileUtil.java index 8405c61..8cb844c 100644 --- a/app/src/main/java/com/frank/ffmpeg/util/FileUtil.java +++ b/app/src/main/java/com/frank/ffmpeg/util/FileUtil.java @@ -76,10 +76,12 @@ public class FileUtil { public static boolean checkFileExist(String path){ if (TextUtils.isEmpty(path)) { Log.e("FileUtil", path + "is null!"); + return false; } File file = new File(path); if(!file.exists()){ Log.e("FileUtil", path + " is not exist!"); + return false; } return true; } diff --git a/app/src/main/res/layout/activity_filter.xml b/app/src/main/res/layout/activity_filter.xml index 1ba8778..d7ff05b 100644 --- a/app/src/main/res/layout/activity_filter.xml +++ b/app/src/main/res/layout/activity_filter.xml @@ -23,4 +23,13 @@ android:textOff="@string/sound_close" android:textOn="@string/sound_open"/> +