Android——实现自定义播放视频,拍照

我这里是实现一个非常简单的自定义的播放器和照相机

播放器布局文件写了一个VideoView控件

    <VideoView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/vv"
        />

java代码

package com.zking.lzy.android_studio_28;

import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;

public class MainActivity extends AppCompatActivity {

    private VideoView vv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vv = (VideoView) findViewById(R.id.vv);
        vv.setVideoURI(Uri.parse(""));
        MediaController mediaController=new MediaController(this);
        mediaController.setMediaPlayer(vv);
        vv.setMediaController(mediaController);
    }
}
里面需要填写一个路径,填的是sd卡的里面的视频路径

照相机里面的布局文件需要写一个SurfaceView的控件

    <SurfaceView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/sv"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="拍照"
        android:onClick="takePhoto"
        />

java代码

package com.zking.lzy.android_studio_28;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;

/**
 * Created by lx on 2017/7/21.
 */

public class CameraActivity extends AppCompatActivity {

    private SurfaceView surfaceView;
    private Camera camera;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_camera);
        surfaceView = (SurfaceView) findViewById(R.id.sv);
        surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                //打开摄像头
                camera = Camera.open();
                //设置摄像参数
                Camera.Parameters parameters= camera.getParameters();
                parameters.setPictureFormat(PixelFormat.JPEG);
                parameters.set("jpeg-quality",100);
                camera.setParameters(parameters);
                //开启预览效果
                camera.startFaceDetection();
                //将画面展示到surfaceView
                try {
                    camera.setPreviewDisplay(surfaceView.getHolder());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

            }

            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {

            }
        });
    }
    public void takePhoto(View view){
        camera.takePicture(null, null, new Camera.PictureCallback() {
            @Override
            public void onPictureTaken(byte[] data, Camera camera) {
                Bitmap bitmap= BitmapFactory.decodeByteArray(data,0,data.length);

                //时间戳
                Calendar calendar=Calendar.getInstance();
                int year=calendar.get(Calendar.YEAR);
                int month=calendar.get(Calendar.MONTH);
                int day=calendar.get(Calendar.DAY_OF_MONTH);
                try {
                    FileOutputStream fos=new FileOutputStream("/mnt/sdcard/dcim/camera/G160628_"+year+(month+1)+day+"_"+System.currentTimeMillis()+".jpg");
                    //压缩
                    bitmap.compress(Bitmap.CompressFormat.JPEG,85,fos);

                    camera.stopPreview();
                    camera.startPreview();

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }

            }
        });
    }


}

需要配置权限

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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android可以通过使用网络请求获取远程视频列表,并实现远程视频播放功能。 首先,需要使用网络请求库(如OkHttp、Volley、Retrofit等)发送请求,获取远程视频列表的数据。可以使用HTTP协议的GET方法发送请求给服务器,服务器返回一个包含视频信息的JSON格式数据。 接下来,需要解析获取到的数据。可以使用JSON解析库(如Gson、JsonSmart等)将JSON数据转化为Java对象,例如一个视频对象包含视频的标题、地址、描述等信息。 一般来说,远程视频播放需要使用特定的视频播放库来实现。在Android系统中,可以使用MediaPlayer类来实现视频播放。创建一个MediaPlayer对象,设置数据源为远程视频的地址,然后调用prepare()方法准备播放,最后调用start()方法开始播放视频。 为了能够展示远程视频列表,可以使用RecyclerView控件展示视频的标题和描述等信息。创建一个RecyclerView对象,设置布局管理器,通常使用LinearLayoutManager或GridLayoutManager来管理RecyclerView的布局。然后创建一个适配器,继承自RecyclerView.Adapter,并在适配器中设置数据源为解析得到的视频列表数据,重写onCreateViewHolder()方法创建ViewHolder实例,再重写onBindViewHolder()方法绑定数据。最后将适配器设置给RecyclerView对象。 当用户点击视频列表中的某个视频时,可以根据视频对象的地址,将其作为数据源设置给MediaPlayer对象,实现远程视频播放播放视频时,还可以为MediaPlayer设置相关的监听器,例如当视频播放完成时,可以设置一个OnCompletionListener监听器,当播放完成时触发相应的操作。 总结起来,实现远程视频播放视频列表功能,需要进行网络请求获取远程视频列表数据,解析数据并展示在RecyclerView中,点击列表项时实现视频播放功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值