首页>代码>安卓开发实现实时拍照滤镜、录像、图片修改的完整项目>/MagicCamera-master/Project-AndroidStudio/app/src/main/java/com/seu/magiccamera/activity/CameraActivity.java
package com.seu.magiccamera.activity; import android.Manifest; import android.animation.Animator; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.pm.PackageManager; import android.graphics.Point; import android.os.Bundle; import android.os.Environment; import android.support.v4.app.ActivityCompat; import android.support.v4.content.PermissionChecker; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import com.seu.magiccamera.R; import com.seu.magiccamera.adapter.FilterAdapter; import com.seu.magicfilter.MagicEngine; import com.seu.magicfilter.filter.helper.MagicFilterType; import com.seu.magicfilter.utils.MagicParams; import com.seu.magicfilter.widget.MagicCameraView; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; /** * Created by why8222 on 2016/3/17. */ public class CameraActivity extends Activity{ private LinearLayout mFilterLayout; private RecyclerView mFilterListView; private FilterAdapter mAdapter; private MagicEngine magicEngine; private boolean isRecording = false; private final int MODE_PIC = 1; private final int MODE_VIDEO = 2; private int mode = MODE_PIC; private ImageView btn_shutter; private ImageView btn_mode; private ObjectAnimator animator; private final MagicFilterType[] types = new MagicFilterType[]{ MagicFilterType.NONE, MagicFilterType.FAIRYTALE, MagicFilterType.SUNRISE, MagicFilterType.SUNSET, MagicFilterType.WHITECAT, MagicFilterType.BLACKCAT, MagicFilterType.SKINWHITEN, MagicFilterType.HEALTHY, MagicFilterType.SWEETS, MagicFilterType.ROMANCE, MagicFilterType.SAKURA, MagicFilterType.WARM, MagicFilterType.ANTIQUE, MagicFilterType.NOSTALGIA, MagicFilterType.CALM, MagicFilterType.LATTE, MagicFilterType.TENDER, MagicFilterType.COOL, MagicFilterType.EMERALD, MagicFilterType.EVERGREEN, MagicFilterType.CRAYON, MagicFilterType.SKETCH, MagicFilterType.AMARO, MagicFilterType.BRANNAN, MagicFilterType.BROOKLYN, MagicFilterType.EARLYBIRD, MagicFilterType.FREUD, MagicFilterType.HEFE, MagicFilterType.HUDSON, MagicFilterType.INKWELL, MagicFilterType.KEVIN, MagicFilterType.LOMO, MagicFilterType.N1977, MagicFilterType.NASHVILLE, MagicFilterType.PIXAR, MagicFilterType.RISE, MagicFilterType.SIERRA, MagicFilterType.SUTRO, MagicFilterType.TOASTER2, MagicFilterType.VALENCIA, MagicFilterType.WALDEN, MagicFilterType.XPROII }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_camera); MagicEngine.Builder builder = new MagicEngine.Builder(); magicEngine = builder .build((MagicCameraView)findViewById(R.id.glsurfaceview_camera)); initView(); } private void initView(){ mFilterLayout = (LinearLayout)findViewById(R.id.layout_filter); mFilterListView = (RecyclerView) findViewById(R.id.filter_listView); btn_shutter = (ImageView)findViewById(R.id.btn_camera_shutter); btn_mode = (ImageView)findViewById(R.id.btn_camera_mode); findViewById(R.id.btn_camera_filter).setOnClickListener(btn_listener); findViewById(R.id.btn_camera_closefilter).setOnClickListener(btn_listener); findViewById(R.id.btn_camera_shutter).setOnClickListener(btn_listener); findViewById(R.id.btn_camera_switch).setOnClickListener(btn_listener); findViewById(R.id.btn_camera_mode).setOnClickListener(btn_listener); findViewById(R.id.btn_camera_beauty).setOnClickListener(btn_listener); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); mFilterListView.setLayoutManager(linearLayoutManager); mAdapter = new FilterAdapter(this, types); mFilterListView.setAdapter(mAdapter); mAdapter.setOnFilterChangeListener(onFilterChangeListener); animator = ObjectAnimator.ofFloat(btn_shutter,"rotation",0,360); animator.setDuration(500); animator.setRepeatCount(ValueAnimator.INFINITE); Point screenSize = new Point(); getWindowManager().getDefaultDisplay().getSize(screenSize); MagicCameraView cameraView = (MagicCameraView)findViewById(R.id.glsurfaceview_camera); RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) cameraView.getLayoutParams(); params.width = screenSize.x; params.height = screenSize.x * 4 / 3; cameraView.setLayoutParams(params); } private FilterAdapter.onFilterChangeListener onFilterChangeListener = new FilterAdapter.onFilterChangeListener(){ @Override public void onFilterChanged(MagicFilterType filterType) { magicEngine.setFilter(filterType); } }; @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (grantResults.length != 1 || grantResults[0] == PackageManager.PERMISSION_GRANTED) { if(mode == MODE_PIC) takePhoto(); else takeVideo(); } else { super.onRequestPermissionsResult(requestCode, permissions, grantResults); } } private View.OnClickListener btn_listener = new View.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_camera_mode: switchMode(); break; case R.id.btn_camera_shutter: if (PermissionChecker.checkSelfPermission(CameraActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) { ActivityCompat.requestPermissions(CameraActivity.this, new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, v.getId()); } else { if(mode == MODE_PIC) takePhoto(); else takeVideo(); } break; case R.id.btn_camera_filter: showFilters(); break; case R.id.btn_camera_switch: magicEngine.switchCamera(); break; case R.id.btn_camera_beauty: new AlertDialog.Builder(CameraActivity.this) .setSingleChoiceItems(new String[] { "关闭", "1", "2", "3", "4", "5"}, MagicParams.beautyLevel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { magicEngine.setBeautyLevel(which); dialog.dismiss(); } }) .setNegativeButton("取消", null) .show(); break; case R.id.btn_camera_closefilter: hideFilters(); break; } } }; private void switchMode(){ if(mode == MODE_PIC){ mode = MODE_VIDEO; btn_mode.setImageResource(R.drawable.icon_camera); }else{ mode = MODE_PIC; btn_mode.setImageResource(R.drawable.icon_video); } } private void takePhoto(){ magicEngine.savePicture(getOutputMediaFile(),null); } private void takeVideo(){ if(isRecording) { animator.end(); magicEngine.stopRecord(); }else { animator.start(); magicEngine.startRecord(); } isRecording = !isRecording; } private void showFilters(){ ObjectAnimator animator = ObjectAnimator.ofFloat(mFilterLayout, "translationY", mFilterLayout.getHeight(), 0); animator.setDuration(200); animator.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { findViewById(R.id.btn_camera_shutter).setClickable(false); mFilterLayout.setVisibility(View.VISIBLE); } @Override public void onAnimationRepeat(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { } @Override public void onAnimationCancel(Animator animation) { } }); animator.start(); } private void hideFilters(){ ObjectAnimator animator = ObjectAnimator.ofFloat(mFilterLayout, "translationY", 0 , mFilterLayout.getHeight()); animator.setDuration(200); animator.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { // TODO Auto-generated method stub } @Override public void onAnimationRepeat(Animator animation) { // TODO Auto-generated method stub } @Override public void onAnimationEnd(Animator animation) { // TODO Auto-generated method stub mFilterLayout.setVisibility(View.INVISIBLE); findViewById(R.id.btn_camera_shutter).setClickable(true); } @Override public void onAnimationCancel(Animator animation) { // TODO Auto-generated method stub mFilterLayout.setVisibility(View.INVISIBLE); findViewById(R.id.btn_camera_shutter).setClickable(true); } }); animator.start(); } public File getOutputMediaFile() { File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), "MagicCamera"); if (!mediaStorageDir.exists()) { if (!mediaStorageDir.mkdirs()) { return null; } } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINESE).format(new Date()); File mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg"); return mediaFile; } }
最近下载更多
yerwiu LV10
1月6日
yyyyyyzh LV8
2023年6月11日
快乐的程序员 LV25
2023年1月21日
zhendong LV7
2022年9月25日
dangzhiyuan012 LV12
2022年3月17日
12312312asd LV5
2022年1月8日
529909739 LV2
2021年11月3日
yjp233 LV6
2021年10月19日
wyx065747 LV67
2021年1月3日
a576353201 LV8
2020年11月18日