package com.milter.www.customviewforblog.camera;
import android.annotation.TargetApi;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapRegionDecoder;
import android.graphics.Matrix;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.hardware.Camera;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.animation.ScaleAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.milter.www.customviewforblog.R;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
/**
* 相机界面
* Created by sky on 15/7/6.
*/
public class CameraActivity extends CameraBaseActivity {
private CameraHelper mCameraHelper;
private Camera.Parameters parameters = null;
private Camera cameraInst = null;
private Bundle bundle = null;
private float pointX, pointY;
static final int FOCUS = 1; // 聚焦
static final int ZOOM = 2; // 缩放
private int mode; //0是聚焦 1是放大
private float dist;
private int PHOTO_SIZE = 2000;
private int mCurrentCameraId = 0; //1是前置 0是后置
private Handler handler = new Handler();
private LinearLayout photoArea;
private View takePhotoPanel;
private Button takePicture;
private ImageView flashBtn;
// private ImageView changeBtn;
private View focusIndex;
private SurfaceView surfaceView;
private int height;
private TextView mMakesure;
private TextView mReplay;
private ImageView mCperture;
public int getDpi(Activity activity) {
int dpi = 0;
Display display = activity.getWindowManager().getDefaultDisplay();
DisplayMetrics dm = new DisplayMetrics();
@SuppressWarnings("rawtypes")
Class c;
try {
c = Class.forName("android.view.Display");
@SuppressWarnings("unchecked")
Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
method.invoke(display, dm);
dpi = dm.heightPixels;
} catch (Exception e) {
e.printStackTrace();
}
return dpi;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera1);
int useHeight = getWindowManager().getDefaultDisplay().getHeight();
int allHeight = getDpi(this);
photoArea = (LinearLayout) findViewById(R.id.photo_area);
takePhotoPanel = findViewById(R.id.panel_take_photo);
takePicture = (Button) findViewById(R.id.takepicture);
flashBtn = (ImageView) findViewById(R.id.flashBtn);
// changeBtn = (ImageView) findViewById(R.id.change);
mCperture = (ImageView) findViewById(R.id.activity_camera_aperture);
mReplay = (TextView) findViewById(R.id.activity_camera_replay);
mMakesure = (TextView) findViewById(R.id.activity_camera_makesure);
// backBtn = (ImageView) findViewById(R.id.back);
focusIndex = findViewById(R.id.focus_index);
View mCameraView = findViewById(R.id.activity_camera_view);
surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
mCameraHelper = new CameraHelper(this);
initView();
initEvent();
///适配华为等具有虚拟按键的手机
if (useHeight < allHeight) {
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.bottomMargin = allHeight - useHeight;
params1.height = allHeight - useHeight;
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
params1.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
takePhotoPanel.setLayoutParams(params);
mCameraView.setLayoutParams(params1);
}
}
private void initView() {
SurfaceHolder surfaceHolder = surfaceView.getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceHolder.setKeepScreenOn(true);
surfaceView.setFocusable(true);
surfaceView.setBackgroundColor(TRIM_MEMORY_BACKGROUND);
surfaceView.getHolder().addCallback(new SurfaceCallback());//为SurfaceView的句柄添加一个回调函数
}
private void initEvent() {
mReplay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (cameraInst == null)
return;
cameraInst.startPreview();
mReplay.setVisibility(View.INVISIBLE);
mMakesure.setVisibility(View.INVISIBLE);
takePicture.setVisibility(View.VISIBLE);
mCperture.setVisibility(View.VISIBLE);
}
});
mMakesure.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
//拍照
takePicture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
cameraInst.takePicture(null, null, new MyPictureCallback());
} catch (Throwable t) {
t.printStackTrace();
toast("拍照失败,请重试!", Toast.LENGTH_LONG);
try {
cameraInst.startPreview();
} catch (Throwable e) {
}
}
}
});
//闪光灯
flashBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
turnLight(cameraInst);
}
});
/*//返回按钮
backBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});*/
surfaceView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
// 主点按下
case MotionEvent.ACTION_DOWN:
pointX = event.getX();
pointY = event.getY();
mode = FOCUS;
break;
// 副点按下
case MotionEvent.ACTION_POINTER_DOWN:
dist = spacing(event);
// 如果连续两点距离大于10,则判定为多点模式
if (spacing(event) > 10f) {
mode = ZOOM;
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
mode = FOCUS;
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
自定义相机.zip (54个子文件)
CustomViewForClock-master
.gitignore 97B
gradle
wrapper
gradle-wrapper.jar 52KB
gradle-wrapper.properties 231B
local.properties 474B
build.gradle 498B
CustomViewForClock-master.iml 879B
gradlew.bat 2KB
gradlew 5KB
app
.gitignore 7B
build.gradle 633B
proguard-rules.pro 679B
app.iml 9KB
libs
src
test
java
com
milter
www
customviewforblog
ExampleUnitTest.java 325B
main
AndroidManifest.xml 1006B
java
com
milter
www
customviewforblog
camera
Album.java 1KB
IOUtil.java 431B
CameraManager.java 2KB
CameraHelperGB.java 2KB
ImageUtils.java 1KB
ActivityHelper.java 944B
DialogHelper.java 6KB
CameraHelperBase.java 2KB
App.java 2KB
PhotoItem.java 2KB
CameraHelper.java 4KB
FileUtils.java 1KB
ActivityResponsable.java 505B
GenericProgressDialog.java 2KB
CameraActivity.java 30KB
CameraBaseActivity.java 2KB
res
values
styles.xml 2KB
colors.xml 1KB
strings.xml 80B
dimens.xml 4KB
mipmap-xxhdpi
ic_launcher.png 8KB
layout
activity_camera1.xml 4KB
view_progress_dialog.xml 1KB
view_transient_notification.xml 741B
mipmap-xhdpi
ic_launcher.png 5KB
drawable-hdpi
simple_toast_bg.9.png 291B
camera_flash_auto.png 2KB
camera_flash_on.png 2KB
camera_flash_off.png 2KB
camera_flip.png 2KB
mipmap-hdpi
ic_launcher.png 3KB
drawable
btn_take_photo.xml 709B
cam_focus.xml 270B
drawable-xhdpi
drawable-xxhdpi
takephoto.png 54KB
mipmap-mdpi
ic_launcher.png 2KB
values-w820dp
dimens.xml 358B
mipmap-xxxhdpi
ic_launcher.png 10KB
androidTest
java
com
milter
www
customviewforblog
ApplicationTest.java 363B
gradle.properties 855B
settings.gradle 15B
共 54 条
- 1
油炸电视剧
- 粉丝: 1
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页