/
demo-camera.rb
69 lines (58 loc) · 1.77 KB
/
demo-camera.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#######################################################
#
# demo-camera.rb (by Scott Moyer)
#
# Fires up a camera. Take a picture by touching
# the screen. Pictures are stored in the scripts
# directory.
#
#######################################################
require 'ruboto/activity'
require 'ruboto/util/toast'
java_import "android.hardware.Camera"
class Camera
def picture_id
@picture_id ||= 0
@picture_id += 1
end
end
class RubotoSurfaceHolderCallback
attr_reader :camera
def surfaceCreated(holder)
@camera = Camera.open # Add (1) for front camera
@camera.preview_display = holder
@camera.start_preview
end
def surfaceChanged(holder, format, width, height)
end
def surfaceDestroyed(holder)
@camera.stop_preview
@camera.release
@camera = nil
end
end
class CameraDemo
def on_create(bundle)
super
@surface_view = android.view.SurfaceView.new(@ruboto_java_instance)
@surface_view.set_on_click_listener{|v| take_picture}
@holder_callback = RubotoSurfaceHolderCallback.new
@surface_view.holder.add_callback @holder_callback
# Deprecated, but still required for older API version
@surface_view.holder.set_type android.view.SurfaceHolder::SURFACE_TYPE_PUSH_BUFFERS
self.content_view = @surface_view
end
def take_picture
camera = @holder_callback.camera
return unless camera
picture_file = "#{Dir.pwd}/picture#{camera.picture_id}.jpg"
camera.take_picture(proc{toast "Picture taken"}, nil) do |data, camera|
fos = java.io.FileOutputStream.new(picture_file)
fos.write(data)
fos.close
end
picture_file
end
end
$irb.start_ruboto_activity "$camera_demo", RubotoActivity, R.style::Theme_NoTitleBar_Fullscreen,
:class_name => "CameraDemo"