自制Camera例子——相机效果

来源:互联网 发布:数据黑产吧 编辑:程序博客网 时间:2024/06/05 09:15
首先查询相机支持的所有效果列表。然后迭代遍历效果列表,判断是否有我们想要的效果。
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下载
0 0