Activity基类增加选择文件

Activity基类增加选择文件,滤镜选择文件后自动播放
pull/107/head
xufulong 6 years ago
parent 52ba7a02a5
commit af92d203fe
  1. 42
      app/src/main/java/com/frank/ffmpeg/activity/BaseActivity.java
  2. 81
      app/src/main/java/com/frank/ffmpeg/activity/FilterActivity.java
  3. 3
      app/src/main/java/com/frank/ffmpeg/activity/MainActivity.java
  4. 2
      app/src/main/java/com/frank/ffmpeg/util/FileUtil.java
  5. 9
      app/src/main/res/layout/activity_filter.xml
  6. 8
      app/src/main/res/menu/menu_setting.xml
  7. BIN
      app/src/main/res/mipmap-mdpi/ic_launcher.png
  8. BIN
      app/src/main/res/mipmap-mdpi/ic_launcher_round.png
  9. 3
      app/src/main/res/values/strings.xml

@ -6,11 +6,21 @@ import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.Toast;
import com.frank.ffmpeg.R;
import com.frank.ffmpeg.util.ContentUtil; import com.frank.ffmpeg.util.ContentUtil;
/**
* Activity基类
* Created by frank on 2019/11/2.
*/
public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener { public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener {
private final static String TAG = BaseActivity.class.getSimpleName(); 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) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
initWindow();
requestPermission(); requestPermission();
setContentView(getLayoutId()); setContentView(getLayoutId());
} }
private void initWindow() { protected void hideActionBar() {
if (getSupportActionBar() != null) { if (getSupportActionBar() != null) {
getSupportActionBar().hide(); 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 extends View> T getView(int viewId) { protected <T extends View> T getView(int viewId) {
return (T) findViewById(viewId); return (T) findViewById(viewId);
} }

@ -1,16 +1,15 @@
package com.frank.ffmpeg.activity; package com.frank.ffmpeg.activity;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.os.Environment;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.SurfaceHolder; import android.view.SurfaceHolder;
import android.view.SurfaceView; import android.view.SurfaceView;
import android.view.View; import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.ToggleButton; import android.widget.ToggleButton;
@ -20,17 +19,19 @@ import com.frank.ffmpeg.adapter.HorizontalAdapter;
import com.frank.ffmpeg.listener.OnItemClickListener; import com.frank.ffmpeg.listener.OnItemClickListener;
import com.frank.ffmpeg.util.FileUtil; import com.frank.ffmpeg.util.FileUtil;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; 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 VideoPlayer videoPlayer;
private SurfaceView surfaceView; private SurfaceView surfaceView;
@ -69,6 +70,7 @@ public class FilterActivity extends AppCompatActivity implements SurfaceHolder.C
//是否播放音频 //是否播放音频
private boolean playAudio = true; private boolean playAudio = true;
private ToggleButton btnSound; private ToggleButton btnSound;
private Button btnSelect;
private final static int MSG_HIDE = 222; private final static int MSG_HIDE = 222;
private final static int DELAY_TIME = 5000; 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后隐藏滤镜操作栏 if (msg.what == MSG_HIDE){//无操作5s后隐藏滤镜操作栏
recyclerView.setVisibility(View.GONE); recyclerView.setVisibility(View.GONE);
btnSound.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; private HideRunnable hideRunnable;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { int getLayoutId() {
return R.layout.activity_filter;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_filter);
initView(); initView();
registerLister(); registerLister();
@ -106,13 +112,13 @@ public class FilterActivity extends AppCompatActivity implements SurfaceHolder.C
} }
private void initView(){ private void initView(){
surfaceView = (SurfaceView) findViewById(R.id.surface_filter); surfaceView = getView(R.id.surface_filter);
surfaceHolder = surfaceView.getHolder(); surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this); surfaceHolder.addCallback(this);
videoPlayer = new VideoPlayer(); 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 linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
recyclerView.setLayoutManager(linearLayoutManager); recyclerView.setLayoutManager(linearLayoutManager);
@ -120,6 +126,9 @@ public class FilterActivity extends AppCompatActivity implements SurfaceHolder.C
itemList.addAll(Arrays.asList(txtArray)); itemList.addAll(Arrays.asList(txtArray));
horizontalAdapter = new HorizontalAdapter(itemList); horizontalAdapter = new HorizontalAdapter(itemList);
recyclerView.setAdapter(horizontalAdapter); 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) { public void onItemClick(int position) {
if(!surfaceCreated) if(!surfaceCreated)
return; return;
if (!FileUtil.checkFileExist(VIDEO_PATH)){ if (!FileUtil.checkFileExist(videoPath)){
showSelectFile();
return; return;
} }
doFilterPlay(position);
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();
} }
}); });
surfaceView.setOnClickListener(new View.OnClickListener() { surfaceView.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
btnSelect.setVisibility(View.VISIBLE);
btnSound.setVisibility(View.VISIBLE); btnSound.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.VISIBLE);//按下SurfaceView,弹出滤镜操作栏 recyclerView.setVisibility(View.VISIBLE);//按下SurfaceView,弹出滤镜操作栏
mHandler.postDelayed(hideRunnable, DELAY_TIME);//5s后发消息通知隐藏滤镜操作栏 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(){ private void setPlayAudio(){
playAudio = !playAudio; playAudio = !playAudio;
@ -195,4 +208,20 @@ public class FilterActivity extends AppCompatActivity implements SurfaceHolder.C
horizontalAdapter = null; 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);
}
} }

@ -26,6 +26,7 @@ public class MainActivity extends BaseActivity {
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
hideActionBar();
initViewsWithClick( initViewsWithClick(
R.id.btn_audio, R.id.btn_audio,
R.id.btn_video, R.id.btn_video,
@ -102,5 +103,5 @@ public class MainActivity extends BaseActivity {
void onSelectedFile(String filePath) { void onSelectedFile(String filePath) {
} }
} }

@ -76,10 +76,12 @@ public class FileUtil {
public static boolean checkFileExist(String path){ public static boolean checkFileExist(String path){
if (TextUtils.isEmpty(path)) { if (TextUtils.isEmpty(path)) {
Log.e("FileUtil", path + "is null!"); Log.e("FileUtil", path + "is null!");
return false;
} }
File file = new File(path); File file = new File(path);
if(!file.exists()){ if(!file.exists()){
Log.e("FileUtil", path + " is not exist!"); Log.e("FileUtil", path + " is not exist!");
return false;
} }
return true; return true;
} }

@ -23,4 +23,13 @@
android:textOff="@string/sound_close" android:textOff="@string/sound_close"
android:textOn="@string/sound_open"/> android:textOn="@string/sound_open"/>
<Button
android:id="@+id/btn_select_file"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_above="@+id/btn_sound"
android:layout_marginBottom="10dp"
android:text="@string/select_file" />
</RelativeLayout> </RelativeLayout>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_select"
android:title="@string/select_file" />
</menu>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

@ -62,4 +62,7 @@
<string name="video_balance">色彩平衡</string> <string name="video_balance">色彩平衡</string>
<string name="video_sharp">锐化</string> <string name="video_sharp">锐化</string>
<string name="select_file">选择文件</string>
<string name="please_select">请选择正确文件</string>
</resources> </resources>

Loading…
Cancel
Save