android自定义camera预览区域,android camera摄像surfaceview预览界面特定区域(该区域可移动)...
1.自定义一个imageview用来设定surfaceview上的特定区域。
public class DrawImageView extends ImageView {
private Paint paint;
private int mFristPointX = 100, mFristPointY = 200;
private int mSecondPointX = 400, mSecondPointY = 500;
private boolean isFirstDown = true;
private int mOldX = 0, mOldY = 0;
public DrawImageView(Context context) {
super(context);
// TODO Auto-generated constructor stub
init();
}
public DrawImageView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
init();
}
private void init() {
paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.RED);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(2.5f);
paint.setAlpha(100);
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
canvas.drawRect(new Rect(getmFristPointX(), getmFristPointY(), getmSecondPointX(), getmSecondPointY()), paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() != MotionEvent.ACTION_UP) {
int x = (int) event.getX();
int y = (int) event.getY();
Rect mRect = new Rect(getmFristPointX(), getmFristPointY(), getmSecondPointX(), getmSecondPointY());
if (mRect.contains(x, y)) {
if (isFirstDown) {
mOldX = x;
mOldY = y;
isFirstDown = false;
} else {
int mXDis = x - mOldX;
int mYDis = y - mOldY;
mOldX = x;
mOldY = y;
ReSetVaue(mXDis, mYDis);
}
}
} else {
isFirstDown = true;
}
return true;
}
public void setValue(int x, int y) {
setmFristPointX(x - 50);
setmFristPointY(y - 50);
setmSecondPointX(x + 50);
setmSecondPointY(y + 50);
invalidate();
}
public void ReSetVaue(int xDis, int yDis) {
setmFristPointX(getmFristPointX() + xDis);
setmFristPointY(getmFristPointY() + yDis);
setmSecondPointX(getmFristPointX() + 100);
setmSecondPointY(getmFristPointY() + 100);
invalidate();
}
public int getmFristPointX() {
return mFristPointX;
}
public void setmFristPointX(int mFristPointX) {
this.mFristPointX = mFristPointX;
}
public int getmFristPointY() {
return mFristPointY;
}
public void setmFristPointY(int mFristPointY) {
this.mFristPointY = mFristPointY;
}
public int getmSecondPointX() {
return mSecondPointX;
}
public void setmSecondPointX(int mSecondPointX) {
this.mSecondPointX = mSecondPointX;
}
public int getmSecondPointY() {
return mSecondPointY;
}
public void setmSecondPointY(int mSeconPointY) {
this.mSecondPointY = mSeconPointY;
}
}
2.定义xml布局。
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" >
android:id="@+id/open_camera"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_marginTop="15dp" />
android:id="@+id/draw_rect"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_marginTop="15dp" />
3.在surfaceChanged中设置参数开始画区域:
DrawImageView.onDraw(new Canvas());
DrawImageView.setValue(mFirstPointX, mFirstPointY);//左上角点的值
4.在camera拍照部分进行压缩裁剪。
private Bitmap mBitmap;
private Camera.PictureCallback takePictureCallback = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// TODO Auto-generated method stub
if (data != null) {
mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
camera.stopPreview();
}
Matrix matrix = new Matrix();
matrix.setRotate(90);
Bitmap rotaBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, false);
getSurfaceSize();
Bitmap sizeBitmap = Bitmap.createScaledBitmap(rotaBitmap, SurView_Width, SurView_Height, true);
SaveBitmap(sizeBitmap);
mFirstPointX = mDrawImageView.getmFristPointX() + 50;
mFirstPointY = mDrawImageView.getmFristPointY() + 50;
Bitmap newBitmap = Bitmap.createBitmap(sizeBitmap, mFirstPointX - 50, mFirstPointY - 50, 100, 100);
if (newBitmap != null) {
mTestImageView.setImageBitmap(newBitmap);
}
camera.startPreview();
}
};
private void getSurfaceSize(){
SurView_Width = mSurfaceView.getWidth();
SurView_Height = mSurfaceView.getHeight();
}
private void SaveBitmap(Bitmap bitmap) {
File mpicture = new File(mPath + File.separator + "pic.jpg");
try {
mpicture.createNewFile();
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(mpicture));
bitmap.compress(CompressFormat.JPEG, 75, outputStream);
outputStream.flush();
outputStream.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
参考文献: http://blog.csdn.net/yanzi1225627/article/details/8580034
android自定义camera预览区域,android camera摄像surfaceview预览界面特定区域(该区域可移动)...相关推荐
- java数字时钟代码,Android自定义数字时钟代码,android自定义时钟,package jp.t
Android自定义数字时钟代码,android自定义时钟,package jp.tpackage jp.tsmsogn.digitalclock;import java.util.Calendar; ...
- android自定义游戏闯关图,Android自定义View(四) -- Canvas
本文计划根据HenCoder系列文章进行学习,所以代码风格及博文素材可能会摘自其中. 1 范围裁切 范围裁切有两个方法: clipRect() 和 clipPath().裁切方法之后的绘制代码,都会被 ...
- android自定义view获取控件,android 自定义控件View在Activity中使用findByViewId得到结果为null...
转载:http://blog.csdn.net/xiabing082/article/details/48781489 1. 大家常常自定义view,,然后在xml 中添加该view 组件..如果在 ...
- android 自定义绘画,【整理】Android 自定义视图之画图
Android 自定义视图之画图 首先简单的一个画矩形的例子 public class DrawView extends View { public DrawView(Context context) ...
- android 自定义 build.gradle,Gradle for Android 第二篇( Build.gradle入门 )
这一系列暂不更新,相关技术讨论,请移步微信群,谢谢,希望大家多多支持! 新年新气象,奋斗的一年,在这一章,我们将学习以下内容: 理解Gradle文件 编写简单的构建任务 自制构建脚本 如果你还没有看g ...
- android 自定义加载动画效果,Android自定义View实现loading动画加载效果
项目开发中对Loading的处理是比较常见的,安卓系统提供的不太美观,引入第三发又太麻烦,这时候自己定义View来实现这个效果,并且进行封装抽取给项目提供统一的loading样式是最好的解决方式了. ...
- android自定义水平长方形进度条,Android 自定义水平进度条的圆角进度
有时项目中需要实现水平圆角进度,如下两种,其实很简单 下面开始看代码,先从主界面布局开始看起: xmlns:tools="http://schemas.android.com/tools&q ...
- android 自定义音乐圆形进度条,Android自定义View实现音频播放圆形进度条
本篇文章介绍自定义View配合属性动画来实现如下的效果 实现思路如下: 根据播放按钮的图片大小计算出圆形进度条的大小 根据音频的时间长度计算出圆形进度条绘制的弧度 通过Handler刷新界面来更新圆形 ...
- Android自定义睡眠下表统计图,Android 进阶自定义View(5)图表统计PieChartView圆饼图的实现...
今天讲图表统计中比较常用的一个,像支付宝的月账单啥的,都是用圆饼图来做数据统计的,先看一下我最终实现的效果图: image.png 该效果实际上是两个实心圆叠加后的效果. image.png imag ...
- android自定义侧滑菜单代码,原生Android 侧滑菜单实践(部分)
此为第一个制作侧滑菜单的实践 . 此部分仅仅为部分实践: 仅缺menu的字符串布局,以及需要修改的MainActivity.java文件,也是需要主要修改的地方. 从使用MD设计-进行侧滑菜单的制作( ...
最新文章
- 鲜为人知的object-fit属性,让您的img图片不再因为固定宽高而被拉伸压缩
- [小技巧] gcc attribute error 属性小试
- vscode使用教程python-使用VS Code进行Python编程
- 时间日期类JAVA包含地区属性_Java常用类 | 时间和日期类
- Bug in Code CodeForces - 420C (计数,图论)
- 请领导审阅并提意见应怎么说_职场中,领导不喜欢你,暗中排挤你,怎么办?老员工给你支5招!...
- 从好买辞职后,为什么我会加入一家开源创业公司?
- 工具类集和_gblfy版本
- 500万人“动口”收蚂蚁森林能量!天猫精灵发布语音“云种树”报告
- linux/ubuntu下简单好用的python opencv安装教程 ( 解决 imshow, SIFT, SURF, CSRT使用问题)
- 【神器】截图+贴图工具 Snipaste
- 必看!超详细的电子元器件选型经验分享
- Java数据脱敏框架
- 连接共享打印机时提示无法访问计算机,win10共享打印机提示无法访问.你可能没有权限使用网络资源怎么解决...
- matlab 线透明度,matlab 曲线填充 透明度
- 登录邮箱用哪个好,好用的登录邮箱推荐
- 昆明oracle考试点,Oracle认证考试知识点:修改sid的步骤
- Habor镜像仓库的搭建
- 2022届测开秋招面经全记录
- 外国用户和国内用户看待浏览器的问题