项目当中需要集成一个微信短视频的功能,领导要求的咱得干,不过百度了好多,没有找到好的,仅仅在开源中国上看到有个人做,不是很完整,这样我根据自己的需求,参考他的设计来进行修改,链接附上:http://www.oschina.net/code/snippet_1460984_46115?p=2#comments.录屏界面的效果图如下:
那么我的思路是,先有个界面如下:
然后是最上边的那张图,最后是:
最后就是视频的播放!
多的不说,先上代码,所有的Activity依次附上:
public class FirstActivity extends ActionBarActivity {
// 录制按钮
private Button btnRecordAudio;
// 播放按钮
private ImageButton btnPlay;
// 文件路径
private String path = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
btnRecordAudio = (Button) findViewById(R.id.btn_record_audio);
btnPlay = (ImageButton) findViewById(R.id.play);
btnRecordAudio.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 启动拍摄的Activity
Intent intent = new Intent(FirstActivity.this,MainActivity.class);
FirstActivity.this.startActivityForResult(intent,200);
}
});
btnPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 显示播放页面
VideoFragment bigPic = VideoFragment.newInstance(path);
android.app.FragmentManager mFragmentManager = getFragmentManager();
FragmentTransaction transaction = mFragmentManager.beginTransaction();
transaction.replace(R.id.main_menu, bigPic);
transaction.commit();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_first, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 200:
if(resultCode == RESULT_OK) {
// 成功
path = data.getStringExtra("path");
Toast.makeText(FirstActivity.this,"存储路径为:"+path,Toast.LENGTH_SHORT).show();
// 通过路径获取第一帧的缩略图并显示
Bitmap bitmap = Utils.createVideoThumbnail(path);
BitmapDrawable drawable = new BitmapDrawable(bitmap);
drawable.setTileModeXY(Shader.TileMode.REPEAT , Shader.TileMode.REPEAT);
drawable.setDither(true);
btnPlay.setBackgroundDrawable(drawable);
} else {
// 失败
}
break;
}
}
}
上面是入口的Activity,下面是拍摄视频时的Activity:
public class MainActivity extends ActionBarActivity {
private MovieRecorderView mRecorderView;
private Button mShootBtn;
private boolean isFinish = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecorderView = (MovieRecorderView) findViewById(R.id.movieRecorderView);
mShootBtn = (Button) findViewById(R.id.shoot_button);
mShootBtn.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
mRecorderView.record(new MovieRecorderView.OnRecordFinishListener() {
@Override
public void onRecordFinish() {
handler.sendEmptyMessage(1);
}