付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】AndroidSurfaceView预览变形怎么办
这篇文章主要介绍了AndroidSurfaceView预览变形怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让在下带着大家一起了解一下。这个问题百度上一搜一大把,基本上都是说找到和SurfaceView的比例相近的camera预览尺寸,但是发现预览时候还是差了点意思,具体看下面这个回调就知道是为什么了。
@Override
public
void
surfaceChanged(SurfaceHolder
holder,
int
format,
int
width,
int
height)
{
Log.i(TAG,
"surfaceChanged:
"
+
width
+
"
"
+
height);
}从上面的回调打印的数据知道其实取相近的比例解决不了根本问题。所以,对于此类的解决方法我只想说仅仅相近有神马用。那么既然知道surfaceChanged的宽高就是SurfaceView的渲染宽高,那么想办法把surfaceChanged里的宽高比弄成和camera比例一样不就行了嘛,所以看SurfaceView的源码:protected
void
updateWindow(boolean
force,
boolean
redrawNeeded)
{
...代码省略
int
myWidth
=
mRequestedWidth;
if
(myWidth
<=
0)
myWidth
=
getWidth();
int
myHeight
=
mRequestedHeight;
if
(myHeight
<=
0)
myHeight
=
getHeight();
...代码省略
if
(creating
||
formatChanged
||
sizeChanged
||
visibleChanged
||
realSizeChanged)
{
if
(DEBUG)
Log.i(TAG,
System.identityHashCode(this)
+
"
"
+
"surfaceChanged
--
format="
+
mFormat
+
"
w="
+
myWidth
+
"
h="
+
myHeight);
if
(callbacks
==
null)
{
callbacks
=
getSurfaceCallbacks();
}
for
(SurfaceHolder.Callback
c
:
callbacks)
{
c.surfaceChanged(mSurfaceHolder,
mFormat,
myWidth,
myHeight);
}
}
...代码省略
}可以看到宽高其实就是调用的View的getHeight和getWidth或者是mRequestedWidth和mRequestedHeight。熟悉了View的自定义就知道getHeight和getWidth都是和View的onMeasure息息相关,所以想到重写onMeasure方法。再从源码看到关于mRequestedWidth和mRequestedHeight的赋值@Override
public
void
setFixedSize(int
width,
int
height)
{
if
(mRequestedWidth
!=
width
||
mRequestedHeight
!=
height)
{
mRequestedWidth
=
width;
mRequestedHeight
=
height;
requestLayout();
}
}以下是完整类代码:public
class
ResizeAbleSurfaceView
extends
SurfaceView
{
private
int
mWidth
=
-1;
private
int
mHeight
=
-1;
public
ResizeAbleSurfaceView(Context
context)
{
super(context);
}
public
ResizeAbleSurfaceView(Context
context,
AttributeSet
attrs)
{
super(context,
attrs);
}
public
ResizeAbleSurfaceView(Context
context,
AttributeSet
attrs,
int
defStyleAttr)
{
super(context,
attrs,
defStyleAttr);
}
@Override
protected
void
onMeasure(int
widthMeasureSpec,
int
heightMeasureSpec)
{
if
(-1
==
mWidth
||
-1
==
mHeight)
{
super.onMeasure(widthMeasureSpec,
heightMeasureSpec);
}
else
{
setMeasuredDimension(mWidth,
mHeight);
}
}
public
void
resize(int
width,
int
height)
{
mWidth
=
width;
mHeight
=
height;
getHolder()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年标注任务分解与验收标准:确保数据质量闭环
- 2026年农业农村标准项目库入库申报书填写范例
- 临床传染性单核细胞增多症护理查房
- 企业年度人才招聘与培训计划书
- AI驱动全媒体资源整合 传声港为企业提供定制化发稿方案
- 企业文化建设中的员工参与度的影响
- 媒体行业数字媒体技术面试全攻略
- 中国平安保险公司培训师面试技巧
- 上海2026年初三中考二模三模试卷专题汇编专题03图形的性质(3大考点)【含答案】
- 从应聘到升职:职场进阶全攻略
- 第三章制药卫生中药药剂学
- 2023年广东高考英语听说考试真题D录音原文与参考答案
- 新大象版四年级下册科学第二单元《自然界的水》课件(共4课)
- 彩钢板屋面拆除、更换屋面板施工方案(改)
- 污水处理厂生物除臭技术方案
- GB/T 20671.2-2006非金属垫片材料分类体系及试验方法第2部分:垫片材料压缩率回弹率试验方法
- 门诊医疗质量管理课件
- 初三数学总复习教学策略课件
- 第三讲-就业信息的收集与处理课件
- 天津大学讲义-工程成本管理概述
- 环境与可持续发展ppt课件(完整版)
评论
0/150
提交评论