Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Surfaceholder.addCallback不工作;surfaceCreated、surfaceChanged和surfacestroyed从未被调用_Android_Scala - Fatal编程技术网

Android Surfaceholder.addCallback不工作;surfaceCreated、surfaceChanged和surfacestroyed从未被调用

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

我正在使用Scala实现一个摄像头预览,它基于android ApiDemos中
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)
原因是,当曲面未正确定位在屏幕上(即完全脱离屏幕)时,将永远不会调用回调。很高兴知道这一点