首先查询相机支持的所有效果列表。然后迭代遍历效果列表,判断是否有我们想要的效果。
MainActivity:
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {
private SurfaceView camera_view;
private Camera camera;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
camera_view = (SurfaceView) findViewById(R.id.camera_view);
SurfaceHolder holder = camera_view.getHolder();
holder.addCallback(this);
}
@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_main, 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();
Camera.Parameters parameters = camera.getParameters();
String selectedEffect = Camera.Parameters.EFFECT_NONE;
//noinspection SimplifiableIfStatement
switch (id) {
case R.id.effect_none:
selectedEffect = Camera.Parameters.EFFECT_NONE;
break;
case R.id.effect_mono:
selectedEffect = Camera.Parameters.EFFECT_MONO;
break;
case R.id.effect_negative:
selectedEffect = Camera.Parameters.EFFECT_NEGATIVE;
break;
case R.id.effect_solarize:
selectedEffect = Camera.Parameters.EFFECT_SOLARIZE;
break;
case R.id.effect_sepia:
selectedEffect = Camera.Parameters.EFFECT_SEPIA;
break;
case R.id.effect_posterize:
selectedEffect = Camera.Parameters.EFFECT_POSTERIZE;
break;
case R.id.effect_whiteboard:
selectedEffect = Camera.Parameters.EFFECT_WHITEBOARD;
break;
case R.id.effect_blackboard:
selectedEffect = Camera.Parameters.EFFECT_BLACKBOARD;
break;
case R.id.effect_aqua:
selectedEffect = Camera.Parameters.EFFECT_AQUA;
break;
}
//获取相机所支持的效果列表,设置效果
List<String> colorEffects = parameters.getSupportedColorEffects();
Iterator<String> colors = colorEffects.iterator();
while (colors.hasNext()) {
String currentEffect = colors.next();
if (currentEffect.equals(selectedEffect)) {
parameters.setColorEffect(currentEffect);
break;
}
}
camera.setParameters(parameters);
return super.onOptionsItemSelected(item);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open();
try {
Camera.Parameters parameters = camera.getParameters();
//设置显示试图,显示视图
if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
//设置相机方向,钟祥
parameters.set("orientation", "portrait");
camera.setDisplayOrientation(90);
//对于Android 2.2及以上版本
parameters.setRotation(90);
} else {
//横向
parameters.set("orientation", "landscape");
camera.setDisplayOrientation(0);
//对于Android 2.2及以上版本
parameters.setRotation(90);
}
camera.setParameters(parameters);
camera.setPreviewDisplay(holder);
} catch (Exception e) {
camera.release();
e.printStackTrace();
}
camera.startPreview();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
;
camera.release();
camera = null;
}
@Override
protected void onDestroy() {
if (camera != null) {
camera.stopPreview();
camera.release();
camera = null;
}
super.onDestroy();
}
}
XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.my.camerademo.MainActivity"
tools:showIn="@layout/activity_main">
<SurfaceView
android:id="@+id/camera_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
Demo下载