自制Camera例子——相机效果

首先查询相机支持的所有效果列表。然后迭代遍历效果列表,判断是否有我们想要的效果。

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值