您的位置:首页 > 移动开发 > 微信开发

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

2017-01-12 16:20 525 查看

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



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

1004a
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android class 视频
相关文章推荐