android中几个小程序,打开照相机,自定义相机,设置固定大小的视频播放

来源:互联网 发布:西北工业大学软件学院 编辑:程序博客网 时间:2024/04/19 09:14

下面是一个打开照相机的程序

这里写图片描述

MainActivity 类

public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {    Camera camera;    SurfaceView sv;//    CameraManager manager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //以这种方法打开的  如果被占用,那么抛异常        sv = (SurfaceView) findViewById(R.id.sv);        sv.getHolder().addCallback(this);    }    @Override    public void surfaceCreated(SurfaceHolder holder) {        //6.0动态权限        if (Build.VERSION.SDK_INT >= 23) {            //Manifest.permission.CAMERA            //如果用户并没有同意该权限            if (checkSelfPermission(Manifest.permission.CAMERA) != PERMISSION_GRANTED) {                //申请权限                requestPermissions(new String[]{Manifest.permission.CAMERA}, 100);            } else {                open(holder);            }        } else {            open(holder);        }    }    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        //如果用户同意了我的权限        if (requestCode == 100 && grantResults[0] == PERMISSION_GRANTED) {            open(sv.getHolder());        }    }    public void open(SurfaceHolder holder) {        //获取摄像头        camera = Camera.open();        //默认方向是-90度倾斜        camera.setDisplayOrientation(90);        try {            camera.setPreviewDisplay(holder);//            Camera.Parameters parameters = camera.getParameters();//            parameters.setPictureSize(720, 1080);//            camera.setParameters(parameters);        } catch (IOException e) {            e.printStackTrace();        }        camera.startPreview();    }    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {    }    @Override    public void surfaceDestroyed(SurfaceHolder holder) {    }    public void paizhao(View v) {        camera.takePicture(null, null, new Camera.PictureCallback() {            @Override            public void onPictureTaken(byte[] data, Camera camera) {                //     synchronized (MainActivity.this.camera) {                try {                    FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/cam.jpg");                    fos.write(data);                    fos.flush();                    fos.close();                    camera.startPreview();                } catch (Exception e) {                    e.printStackTrace();                }            }            // }        });    }}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.administrator.lesson15_camera.MainActivity">    <SurfaceView        android:id="@+id/sv"        android:layout_width="match_parent"        android:layout_height="match_parent" />    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_centerHorizontal="true"        android:onClick="paizhao"        android:text="拍照" /></RelativeLayout>

manifest的注册

  <uses-permission android:name="android.permission.CAMERA" />  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

自定义相机,第一个位置是照相机

这里写图片描述

第一个位置是放照片相机的位置

MainActivity 类

public class MainActivity extends AppCompatActivity {    GridView gv;    List<File> fileList = new ArrayList<>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        gv = (GridView) findViewById(R.id.gv);        initData();    }    private void initData() {        new Thread() {            @Override            public void run() {                fileList.clear();                fileList.addAll(FileUtils.getAllPicture());                //子线程操作UI                runOnUiThread(new Runnable() {                    @Override                    public void run() {                        gv.setAdapter(adapter);                        adapter.notifyDataSetChanged();                    }                });            }        }.start();    }    private BaseAdapter adapter = new BaseAdapter() {        @Override        public int getCount() {            return fileList.size();        }        @Override        public Object getItem(int position) {            return null;        }        @Override        public long getItemId(int position) {            return 0;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            int width = getResources().getDisplayMetrics().widthPixels / 3;            GridView.LayoutParams params = new GridView.LayoutParams(width, width);            switch (getItemViewType(position)) {                case 0:                    if (convertView == null || convertView instanceof ImageView) {                        convertView = View.inflate(getBaseContext(), R.layout.camera_layout, null);                        convertView.setLayoutParams(params);                    }                    MyCamera cam = (MyCamera) convertView.findViewById(R.id.cam);                    break;                case 1:                    if (convertView == null || convertView instanceof MyCamera) {                        convertView = new ImageView(MainActivity.this);                    }                    ImageView iv = (ImageView) convertView;                    File file = fileList.get(position);                    iv.setImageURI(Uri.fromFile(file));                    convertView.setLayoutParams(params);                    break;            }            return convertView;        }        @Override        public int getItemViewType(int position) {            return position == 0 ? 0 : 1;        }        @Override        public int getViewTypeCount() {            return 2;        }    };}

MyCamera 类

public class MyCamera extends SurfaceView implements SurfaceHolder.Callback {    static Camera camera;    public MyCamera(Context context) {        super(context);        init();    }    private void init() {        getHolder().addCallback(this);    }    public MyCamera(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    @Override    public void surfaceCreated(final SurfaceHolder holder) {        release();        open(holder);    }    private void open(SurfaceHolder holder) {        camera = Camera.open();        try {            camera.setPreviewDisplay(holder);            camera.setDisplayOrientation(90);            //模拟器需要设置            Camera.Parameters parameters = camera.getParameters();            parameters.setPictureSize(300, 300);            camera.setParameters(parameters);            camera.startPreview();        } catch (Exception e) {            e.printStackTrace();        }    }    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {    }    public void start() {        if (camera != null)            camera.startPreview();    }    @Override    public void surfaceDestroyed(SurfaceHolder holder) {        release();    }    public void release() {        if (camera != null) {            camera.stopPreview();            camera.release();            camera = null;        }    }}

camera_layout

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <com.example.camerademo.MyCamera        android:id="@+id/myca"        android:layout_width="match_parent"        android:layout_height="match_parent" /></LinearLayout>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"    android:layout_width="match_parent" android:layout_height="match_parent"    tools:context="com.example.camerademo.MainActivity">    <GridView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/gv"        android:numColumns="3"/></RelativeLayout>

需要权限

   <uses-permission android:name="android.permission.CAMERA"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

设置一个固定大小的视频播放

这里写图片描述

固定视频需要放在res目录下新建的raw文件中

public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {    SurfaceView sv;    MediaPlayer mp;    MediaController mc;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        sv = (SurfaceView) findViewById(R.id.sv);        mc = (MediaController) findViewById(R.id.mc);        SurfaceHolder holder = sv.getHolder();        //设置监听        holder.addCallback(this);    }    @Override    public void surfaceCreated(SurfaceHolder holder) {        //播放视频        mp = MediaPlayer.create(this, R.raw.hd);        mp.setDisplay(holder);        mp.start();    }    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {    }    @Override    public void surfaceDestroyed(SurfaceHolder holder) {        if (mp != null)            mp.release();        mp = null;    }    public void pause(View v) {        if (mp.isPlaying())            mp.pause();        else            mp.start();    }}

xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"android:orientation="vertical"    tools:context="com.example.mediaplayer_11_3.MainActivity"><SurfaceView    android:layout_width="300dp"    android:layout_height="300dp"    android:layout_centerInParent="true"    android:id="@+id/sv"/><Button    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="暂停"    android:onClick="pause"    android:layout_alignParentBottom="true"    android:layout_centerInParent="true"    /></RelativeLayout>
1 0
原创粉丝点击