Android Surfaceholder.addCallback不工作;surfaceCreated、surfaceChanged和surfacestroyed从未被调用
我正在使用Scala实现一个摄像头预览,它基于android ApiDemos中Android Surfaceholder.addCallback不工作;surfaceCreated、surfaceChanged和surfacestroyed从未被调用,android,scala,Android,Scala,我正在使用Scala实现一个摄像头预览,它基于android ApiDemos中com.example.android.api.graphics.CameraPreview中的代码。但是,SurfaceHolder.Callback(surfaceCreated,surfaceChanged,和surfaceDestroyed)的方法似乎从未被调用过。代码如下: class TakePictureActivity扩展了ActivityWithLog{ lazy val preview=findv
com.example.android.api.graphics.CameraPreview
中的代码。但是,SurfaceHolder.Callback
(surfaceCreated
,surfaceChanged
,和surfaceDestroyed
)的方法似乎从未被调用过。代码如下:
class TakePictureActivity扩展了ActivityWithLog{
lazy val preview=findviewbyd(R.id.preview).asInstanceOf[CameraPreview]
重写def onCreate(savedInstanceState:Bundle){
super.onCreate(savedInstanceState)
setContentView(右布局,拍摄照片)
}
恢复时覆盖def{
super.onResume()
preview.camera=camera.open()
}
覆盖def onPause{
super.onPause()
对于(c abs(s.宽度*s.高度-目标区域))
size.filter{size=>
val r=size.width.asInstanceOf[Double]/size.height
abs(r-目标比率)<0.1
}匹配{
case Seq()=>闭合区域(大小)
案例xs=>closestInArea(xs)
}
}
在测量时覆盖def(宽度测量规格:Int,
高度测量规格:Int){
val w=View.resolveSize(getSuggestedMinimumWidth,widthMeasureSpec)
val h=视图.resolveSize(getSuggestedMinimumHeight,heightMeasureSpec)
设定测量尺寸(w,h)
对于(c0){
val child=getChildAt(0)
val(w,h)=(r-l,b-t)
val(pw,ph)=预览大小匹配{
外壳部分=>(s.宽度,s.高度)
案例无=>(w,h)
}
如果(w*ph>h*pw){
val scaledChildWidth=pw*h/ph
布局((w-scaledChildWidth)/2,0,
(w+缩放儿童宽度)/2,h)
}否则{
val scaledChildHeight=ph*w/pw
子布局(0,(h-缩放子高度)/2,
w、 (h-标度儿童身高)/2)
}
}
}
val surfaceView=新的surfaceView(上下文)
addView(surfaceView)
surfaceView.getHolder.addCallback(此)
def表面处理(支架:表面处理){
日志d(标签“表面处理”)
因为(c我自己解决了。这是CameraPreview.onLayout中的一个错误;这些行
child.layout(0,(h-scaledChildHeight)/2,
w、 (h-标度儿童身高)/2)
应该改成这些
child.layout(0,(h-scaledChildHeight)/2,
w、 (h+标度儿童身高)/2)
原因是,当曲面未正确定位在屏幕上(即完全脱离屏幕)时,将永远不会调用回调。很高兴知道这一点